| 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 |