| OLD | NEW | 
|---|
| 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 276 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 287       break; | 287       break; | 
| 288     case MachineRepresentation::kWord16: | 288     case MachineRepresentation::kWord16: | 
| 289       opcode = load_rep.IsUnsigned() ? kMipsLhu : kMipsLh; | 289       opcode = load_rep.IsUnsigned() ? kMipsLhu : kMipsLh; | 
| 290       break; | 290       break; | 
| 291     case MachineRepresentation::kTaggedSigned:   // Fall through. | 291     case MachineRepresentation::kTaggedSigned:   // Fall through. | 
| 292     case MachineRepresentation::kTaggedPointer:  // Fall through. | 292     case MachineRepresentation::kTaggedPointer:  // Fall through. | 
| 293     case MachineRepresentation::kTagged:  // Fall through. | 293     case MachineRepresentation::kTagged:  // Fall through. | 
| 294     case MachineRepresentation::kWord32: | 294     case MachineRepresentation::kWord32: | 
| 295       opcode = kMipsLw; | 295       opcode = kMipsLw; | 
| 296       break; | 296       break; | 
|  | 297     case MachineRepresentation::kSimd128: | 
|  | 298       opcode = kMipsMsaLd; | 
|  | 299       break; | 
| 297     case MachineRepresentation::kWord64:   // Fall through. | 300     case MachineRepresentation::kWord64:   // Fall through. | 
| 298     case MachineRepresentation::kSimd128:  // Fall through. |  | 
| 299     case MachineRepresentation::kSimd1x4:  // Fall through. | 301     case MachineRepresentation::kSimd1x4:  // Fall through. | 
| 300     case MachineRepresentation::kSimd1x8:  // Fall through. | 302     case MachineRepresentation::kSimd1x8:  // Fall through. | 
| 301     case MachineRepresentation::kSimd1x16:  // Fall through. | 303     case MachineRepresentation::kSimd1x16:  // Fall through. | 
| 302     case MachineRepresentation::kNone: | 304     case MachineRepresentation::kNone: | 
| 303       UNREACHABLE(); | 305       UNREACHABLE(); | 
| 304       return; | 306       return; | 
| 305   } | 307   } | 
| 306 | 308 | 
| 307   if (g.CanBeImmediate(index, opcode)) { | 309   if (g.CanBeImmediate(index, opcode)) { | 
| 308     Emit(opcode | AddressingModeField::encode(kMode_MRI), | 310     Emit(opcode | AddressingModeField::encode(kMode_MRI), | 
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 375         break; | 377         break; | 
| 376       case MachineRepresentation::kWord16: | 378       case MachineRepresentation::kWord16: | 
| 377         opcode = kMipsSh; | 379         opcode = kMipsSh; | 
| 378         break; | 380         break; | 
| 379       case MachineRepresentation::kTaggedSigned:   // Fall through. | 381       case MachineRepresentation::kTaggedSigned:   // Fall through. | 
| 380       case MachineRepresentation::kTaggedPointer:  // Fall through. | 382       case MachineRepresentation::kTaggedPointer:  // Fall through. | 
| 381       case MachineRepresentation::kTagged:  // Fall through. | 383       case MachineRepresentation::kTagged:  // Fall through. | 
| 382       case MachineRepresentation::kWord32: | 384       case MachineRepresentation::kWord32: | 
| 383         opcode = kMipsSw; | 385         opcode = kMipsSw; | 
| 384         break; | 386         break; | 
|  | 387       case MachineRepresentation::kSimd128: | 
|  | 388         opcode = kMipsMsaSt; | 
|  | 389         break; | 
| 385       case MachineRepresentation::kWord64:   // Fall through. | 390       case MachineRepresentation::kWord64:   // Fall through. | 
| 386       case MachineRepresentation::kSimd128:  // Fall through. |  | 
| 387       case MachineRepresentation::kSimd1x4:  // Fall through. | 391       case MachineRepresentation::kSimd1x4:  // Fall through. | 
| 388       case MachineRepresentation::kSimd1x8:  // Fall through. | 392       case MachineRepresentation::kSimd1x8:  // Fall through. | 
| 389       case MachineRepresentation::kSimd1x16:  // Fall through. | 393       case MachineRepresentation::kSimd1x16:  // Fall through. | 
| 390       case MachineRepresentation::kNone: | 394       case MachineRepresentation::kNone: | 
| 391         UNREACHABLE(); | 395         UNREACHABLE(); | 
| 392         return; | 396         return; | 
| 393     } | 397     } | 
| 394 | 398 | 
| 395     if (g.CanBeImmediate(index, opcode)) { | 399     if (g.CanBeImmediate(index, opcode)) { | 
| 396       Emit(opcode | AddressingModeField::encode(kMode_MRI), g.NoOutput(), | 400       Emit(opcode | AddressingModeField::encode(kMode_MRI), g.NoOutput(), | 
| (...skipping 830 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1227     case MachineRepresentation::kTagged:  // Fall through. | 1231     case MachineRepresentation::kTagged:  // Fall through. | 
| 1228     case MachineRepresentation::kWord32: | 1232     case MachineRepresentation::kWord32: | 
| 1229       opcode = kMipsUlw; | 1233       opcode = kMipsUlw; | 
| 1230       break; | 1234       break; | 
| 1231     case MachineRepresentation::kFloat32: | 1235     case MachineRepresentation::kFloat32: | 
| 1232       opcode = kMipsUlwc1; | 1236       opcode = kMipsUlwc1; | 
| 1233       break; | 1237       break; | 
| 1234     case MachineRepresentation::kFloat64: | 1238     case MachineRepresentation::kFloat64: | 
| 1235       opcode = kMipsUldc1; | 1239       opcode = kMipsUldc1; | 
| 1236       break; | 1240       break; | 
|  | 1241     case MachineRepresentation::kSimd128: | 
|  | 1242       opcode = kMipsMsaLd; | 
|  | 1243       break; | 
| 1237     case MachineRepresentation::kWord64:   // Fall through. | 1244     case MachineRepresentation::kWord64:   // Fall through. | 
| 1238     case MachineRepresentation::kSimd128:  // Fall through. |  | 
| 1239     case MachineRepresentation::kSimd1x4:  // Fall through. | 1245     case MachineRepresentation::kSimd1x4:  // Fall through. | 
| 1240     case MachineRepresentation::kSimd1x8:  // Fall through. | 1246     case MachineRepresentation::kSimd1x8:  // Fall through. | 
| 1241     case MachineRepresentation::kSimd1x16:  // Fall through. | 1247     case MachineRepresentation::kSimd1x16:  // Fall through. | 
| 1242     case MachineRepresentation::kNone: | 1248     case MachineRepresentation::kNone: | 
| 1243       UNREACHABLE(); | 1249       UNREACHABLE(); | 
| 1244       return; | 1250       return; | 
| 1245   } | 1251   } | 
| 1246 | 1252 | 
| 1247   if (g.CanBeImmediate(index, opcode)) { | 1253   if (g.CanBeImmediate(index, opcode)) { | 
| 1248     Emit(opcode | AddressingModeField::encode(kMode_MRI), | 1254     Emit(opcode | AddressingModeField::encode(kMode_MRI), | 
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1280       break; | 1286       break; | 
| 1281     case MachineRepresentation::kWord16: | 1287     case MachineRepresentation::kWord16: | 
| 1282       opcode = kMipsUsh; | 1288       opcode = kMipsUsh; | 
| 1283       break; | 1289       break; | 
| 1284     case MachineRepresentation::kTaggedSigned:   // Fall through. | 1290     case MachineRepresentation::kTaggedSigned:   // Fall through. | 
| 1285     case MachineRepresentation::kTaggedPointer:  // Fall through. | 1291     case MachineRepresentation::kTaggedPointer:  // Fall through. | 
| 1286     case MachineRepresentation::kTagged:  // Fall through. | 1292     case MachineRepresentation::kTagged:  // Fall through. | 
| 1287     case MachineRepresentation::kWord32: | 1293     case MachineRepresentation::kWord32: | 
| 1288       opcode = kMipsUsw; | 1294       opcode = kMipsUsw; | 
| 1289       break; | 1295       break; | 
|  | 1296     case MachineRepresentation::kSimd128: | 
|  | 1297       opcode = kMipsMsaSt; | 
|  | 1298       break; | 
| 1290     case MachineRepresentation::kWord64:   // Fall through. | 1299     case MachineRepresentation::kWord64:   // Fall through. | 
| 1291     case MachineRepresentation::kSimd128:  // Fall through. |  | 
| 1292     case MachineRepresentation::kSimd1x4:  // Fall through. | 1300     case MachineRepresentation::kSimd1x4:  // Fall through. | 
| 1293     case MachineRepresentation::kSimd1x8:  // Fall through. | 1301     case MachineRepresentation::kSimd1x8:  // Fall through. | 
| 1294     case MachineRepresentation::kSimd1x16:  // Fall through. | 1302     case MachineRepresentation::kSimd1x16:  // Fall through. | 
| 1295     case MachineRepresentation::kNone: | 1303     case MachineRepresentation::kNone: | 
| 1296       UNREACHABLE(); | 1304       UNREACHABLE(); | 
| 1297       return; | 1305       return; | 
| 1298   } | 1306   } | 
| 1299 | 1307 | 
| 1300   if (g.CanBeImmediate(index, opcode)) { | 1308   if (g.CanBeImmediate(index, opcode)) { | 
| 1301     Emit(opcode | AddressingModeField::encode(kMode_MRI), g.NoOutput(), | 1309     Emit(opcode | AddressingModeField::encode(kMode_MRI), g.NoOutput(), | 
| (...skipping 1032 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2334 } | 2342 } | 
| 2335 | 2343 | 
| 2336 void InstructionSelector::VisitS128Xor(Node* node) { | 2344 void InstructionSelector::VisitS128Xor(Node* node) { | 
| 2337   VisitRRR(this, kMipsS128Xor, node); | 2345   VisitRRR(this, kMipsS128Xor, node); | 
| 2338 } | 2346 } | 
| 2339 | 2347 | 
| 2340 void InstructionSelector::VisitS128Not(Node* node) { | 2348 void InstructionSelector::VisitS128Not(Node* node) { | 
| 2341   VisitRR(this, kMipsS128Not, node); | 2349   VisitRR(this, kMipsS128Not, node); | 
| 2342 } | 2350 } | 
| 2343 | 2351 | 
|  | 2352 void InstructionSelector::VisitS1x4And(Node* node) { | 
|  | 2353   VisitRRR(this, kMipsS128And, node); | 
|  | 2354 } | 
|  | 2355 | 
|  | 2356 void InstructionSelector::VisitS1x4Or(Node* node) { | 
|  | 2357   VisitRRR(this, kMipsS128Or, node); | 
|  | 2358 } | 
|  | 2359 | 
|  | 2360 void InstructionSelector::VisitS1x4Xor(Node* node) { | 
|  | 2361   VisitRRR(this, kMipsS128Xor, node); | 
|  | 2362 } | 
|  | 2363 | 
|  | 2364 void InstructionSelector::VisitS1x4Not(Node* node) { | 
|  | 2365   VisitRR(this, kMipsS128Not, node); | 
|  | 2366 } | 
|  | 2367 | 
|  | 2368 void InstructionSelector::VisitS1x4AnyTrue(Node* node) { | 
|  | 2369   VisitRR(this, kMipsS1x4AnyTrue, node); | 
|  | 2370 } | 
|  | 2371 | 
|  | 2372 void InstructionSelector::VisitS1x4AllTrue(Node* node) { | 
|  | 2373   VisitRR(this, kMipsS1x4AllTrue, node); | 
|  | 2374 } | 
|  | 2375 | 
|  | 2376 void InstructionSelector::VisitS1x8And(Node* node) { | 
|  | 2377   VisitRRR(this, kMipsS128And, node); | 
|  | 2378 } | 
|  | 2379 | 
|  | 2380 void InstructionSelector::VisitS1x8Or(Node* node) { | 
|  | 2381   VisitRRR(this, kMipsS128Or, node); | 
|  | 2382 } | 
|  | 2383 | 
|  | 2384 void InstructionSelector::VisitS1x8Xor(Node* node) { | 
|  | 2385   VisitRRR(this, kMipsS128Xor, node); | 
|  | 2386 } | 
|  | 2387 | 
|  | 2388 void InstructionSelector::VisitS1x8Not(Node* node) { | 
|  | 2389   VisitRR(this, kMipsS128Not, node); | 
|  | 2390 } | 
|  | 2391 | 
|  | 2392 void InstructionSelector::VisitS1x8AnyTrue(Node* node) { | 
|  | 2393   VisitRR(this, kMipsS1x8AnyTrue, node); | 
|  | 2394 } | 
|  | 2395 | 
|  | 2396 void InstructionSelector::VisitS1x8AllTrue(Node* node) { | 
|  | 2397   VisitRR(this, kMipsS1x8AllTrue, node); | 
|  | 2398 } | 
|  | 2399 | 
|  | 2400 void InstructionSelector::VisitS1x16And(Node* node) { | 
|  | 2401   VisitRRR(this, kMipsS128And, node); | 
|  | 2402 } | 
|  | 2403 | 
|  | 2404 void InstructionSelector::VisitS1x16Or(Node* node) { | 
|  | 2405   VisitRRR(this, kMipsS128Or, node); | 
|  | 2406 } | 
|  | 2407 | 
|  | 2408 void InstructionSelector::VisitS1x16Xor(Node* node) { | 
|  | 2409   VisitRRR(this, kMipsS128Xor, node); | 
|  | 2410 } | 
|  | 2411 | 
|  | 2412 void InstructionSelector::VisitS1x16Not(Node* node) { | 
|  | 2413   VisitRR(this, kMipsS128Not, node); | 
|  | 2414 } | 
|  | 2415 | 
|  | 2416 void InstructionSelector::VisitS1x16AnyTrue(Node* node) { | 
|  | 2417   VisitRR(this, kMipsS1x16AnyTrue, node); | 
|  | 2418 } | 
|  | 2419 | 
|  | 2420 void InstructionSelector::VisitS1x16AllTrue(Node* node) { | 
|  | 2421   VisitRR(this, kMipsS1x16AllTrue, node); | 
|  | 2422 } | 
|  | 2423 | 
| 2344 // static | 2424 // static | 
| 2345 MachineOperatorBuilder::Flags | 2425 MachineOperatorBuilder::Flags | 
| 2346 InstructionSelector::SupportedMachineOperatorFlags() { | 2426 InstructionSelector::SupportedMachineOperatorFlags() { | 
| 2347   MachineOperatorBuilder::Flags flags = MachineOperatorBuilder::kNoFlags; | 2427   MachineOperatorBuilder::Flags flags = MachineOperatorBuilder::kNoFlags; | 
| 2348   if ((IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r6)) && | 2428   if ((IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r6)) && | 
| 2349       IsFp64Mode()) { | 2429       IsFp64Mode()) { | 
| 2350     flags |= MachineOperatorBuilder::kFloat64RoundDown | | 2430     flags |= MachineOperatorBuilder::kFloat64RoundDown | | 
| 2351              MachineOperatorBuilder::kFloat64RoundUp | | 2431              MachineOperatorBuilder::kFloat64RoundUp | | 
| 2352              MachineOperatorBuilder::kFloat64RoundTruncate | | 2432              MachineOperatorBuilder::kFloat64RoundTruncate | | 
| 2353              MachineOperatorBuilder::kFloat64RoundTiesEven; | 2433              MachineOperatorBuilder::kFloat64RoundTiesEven; | 
| (...skipping 22 matching lines...) Expand all  Loading... | 
| 2376     DCHECK(IsMipsArchVariant(kLoongson) || IsMipsArchVariant(kMips32r1) || | 2456     DCHECK(IsMipsArchVariant(kLoongson) || IsMipsArchVariant(kMips32r1) || | 
| 2377            IsMipsArchVariant(kMips32r2)); | 2457            IsMipsArchVariant(kMips32r2)); | 
| 2378     return MachineOperatorBuilder::AlignmentRequirements:: | 2458     return MachineOperatorBuilder::AlignmentRequirements:: | 
| 2379         NoUnalignedAccessSupport(); | 2459         NoUnalignedAccessSupport(); | 
| 2380   } | 2460   } | 
| 2381 } | 2461 } | 
| 2382 | 2462 | 
| 2383 }  // namespace compiler | 2463 }  // namespace compiler | 
| 2384 }  // namespace internal | 2464 }  // namespace internal | 
| 2385 }  // namespace v8 | 2465 }  // namespace v8 | 
| OLD | NEW | 
|---|