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/compiler/instruction-selector-impl.h" | 5 #include "src/compiler/instruction-selector-impl.h" |
6 #include "src/compiler/node-matchers.h" | 6 #include "src/compiler/node-matchers.h" |
7 #include "src/compiler/node-properties.h" | 7 #include "src/compiler/node-properties.h" |
8 | 8 |
9 namespace v8 { | 9 namespace v8 { |
10 namespace internal { | 10 namespace internal { |
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
364 break; | 364 break; |
365 case MachineRepresentation::kWord32: | 365 case MachineRepresentation::kWord32: |
366 opcode = kArm64LdrW; | 366 opcode = kArm64LdrW; |
367 immediate_mode = kLoadStoreImm32; | 367 immediate_mode = kLoadStoreImm32; |
368 break; | 368 break; |
369 case MachineRepresentation::kTagged: // Fall through. | 369 case MachineRepresentation::kTagged: // Fall through. |
370 case MachineRepresentation::kWord64: | 370 case MachineRepresentation::kWord64: |
371 opcode = kArm64Ldr; | 371 opcode = kArm64Ldr; |
372 immediate_mode = kLoadStoreImm64; | 372 immediate_mode = kLoadStoreImm64; |
373 break; | 373 break; |
| 374 case MachineRepresentation::kSimd128: // Fall through. |
374 case MachineRepresentation::kNone: | 375 case MachineRepresentation::kNone: |
375 UNREACHABLE(); | 376 UNREACHABLE(); |
376 return; | 377 return; |
377 } | 378 } |
378 if (g.CanBeImmediate(index, immediate_mode)) { | 379 if (g.CanBeImmediate(index, immediate_mode)) { |
379 Emit(opcode | AddressingModeField::encode(kMode_MRI), | 380 Emit(opcode | AddressingModeField::encode(kMode_MRI), |
380 g.DefineAsRegister(node), g.UseRegister(base), g.UseImmediate(index)); | 381 g.DefineAsRegister(node), g.UseRegister(base), g.UseImmediate(index)); |
381 } else { | 382 } else { |
382 Emit(opcode | AddressingModeField::encode(kMode_MRR), | 383 Emit(opcode | AddressingModeField::encode(kMode_MRR), |
383 g.DefineAsRegister(node), g.UseRegister(base), g.UseRegister(index)); | 384 g.DefineAsRegister(node), g.UseRegister(base), g.UseRegister(index)); |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
459 break; | 460 break; |
460 case MachineRepresentation::kWord32: | 461 case MachineRepresentation::kWord32: |
461 opcode = kArm64StrW; | 462 opcode = kArm64StrW; |
462 immediate_mode = kLoadStoreImm32; | 463 immediate_mode = kLoadStoreImm32; |
463 break; | 464 break; |
464 case MachineRepresentation::kTagged: // Fall through. | 465 case MachineRepresentation::kTagged: // Fall through. |
465 case MachineRepresentation::kWord64: | 466 case MachineRepresentation::kWord64: |
466 opcode = kArm64Str; | 467 opcode = kArm64Str; |
467 immediate_mode = kLoadStoreImm64; | 468 immediate_mode = kLoadStoreImm64; |
468 break; | 469 break; |
| 470 case MachineRepresentation::kSimd128: // Fall through. |
469 case MachineRepresentation::kNone: | 471 case MachineRepresentation::kNone: |
470 UNREACHABLE(); | 472 UNREACHABLE(); |
471 return; | 473 return; |
472 } | 474 } |
473 if (g.CanBeImmediate(index, immediate_mode)) { | 475 if (g.CanBeImmediate(index, immediate_mode)) { |
474 Emit(opcode | AddressingModeField::encode(kMode_MRI), g.NoOutput(), | 476 Emit(opcode | AddressingModeField::encode(kMode_MRI), g.NoOutput(), |
475 g.UseRegister(base), g.UseImmediate(index), g.UseRegister(value)); | 477 g.UseRegister(base), g.UseImmediate(index), g.UseRegister(value)); |
476 } else { | 478 } else { |
477 Emit(opcode | AddressingModeField::encode(kMode_MRR), g.NoOutput(), | 479 Emit(opcode | AddressingModeField::encode(kMode_MRR), g.NoOutput(), |
478 g.UseRegister(base), g.UseRegister(index), g.UseRegister(value)); | 480 g.UseRegister(base), g.UseRegister(index), g.UseRegister(value)); |
(...skipping 21 matching lines...) Expand all Loading... |
500 break; | 502 break; |
501 case MachineRepresentation::kWord64: | 503 case MachineRepresentation::kWord64: |
502 opcode = kCheckedLoadWord64; | 504 opcode = kCheckedLoadWord64; |
503 break; | 505 break; |
504 case MachineRepresentation::kFloat32: | 506 case MachineRepresentation::kFloat32: |
505 opcode = kCheckedLoadFloat32; | 507 opcode = kCheckedLoadFloat32; |
506 break; | 508 break; |
507 case MachineRepresentation::kFloat64: | 509 case MachineRepresentation::kFloat64: |
508 opcode = kCheckedLoadFloat64; | 510 opcode = kCheckedLoadFloat64; |
509 break; | 511 break; |
510 case MachineRepresentation::kBit: // Fall through. | 512 case MachineRepresentation::kBit: // Fall through. |
511 case MachineRepresentation::kTagged: // Fall through. | 513 case MachineRepresentation::kTagged: // Fall through. |
| 514 case MachineRepresentation::kSimd128: // Fall through. |
512 case MachineRepresentation::kNone: | 515 case MachineRepresentation::kNone: |
513 UNREACHABLE(); | 516 UNREACHABLE(); |
514 return; | 517 return; |
515 } | 518 } |
516 Emit(opcode, g.DefineAsRegister(node), g.UseRegister(buffer), | 519 Emit(opcode, g.DefineAsRegister(node), g.UseRegister(buffer), |
517 g.UseRegister(offset), g.UseOperand(length, kArithmeticImm)); | 520 g.UseRegister(offset), g.UseOperand(length, kArithmeticImm)); |
518 } | 521 } |
519 | 522 |
520 | 523 |
521 void InstructionSelector::VisitCheckedStore(Node* node) { | 524 void InstructionSelector::VisitCheckedStore(Node* node) { |
(...skipping 16 matching lines...) Expand all Loading... |
538 break; | 541 break; |
539 case MachineRepresentation::kWord64: | 542 case MachineRepresentation::kWord64: |
540 opcode = kCheckedStoreWord64; | 543 opcode = kCheckedStoreWord64; |
541 break; | 544 break; |
542 case MachineRepresentation::kFloat32: | 545 case MachineRepresentation::kFloat32: |
543 opcode = kCheckedStoreFloat32; | 546 opcode = kCheckedStoreFloat32; |
544 break; | 547 break; |
545 case MachineRepresentation::kFloat64: | 548 case MachineRepresentation::kFloat64: |
546 opcode = kCheckedStoreFloat64; | 549 opcode = kCheckedStoreFloat64; |
547 break; | 550 break; |
548 case MachineRepresentation::kBit: // Fall through. | 551 case MachineRepresentation::kBit: // Fall through. |
549 case MachineRepresentation::kTagged: // Fall through. | 552 case MachineRepresentation::kTagged: // Fall through. |
| 553 case MachineRepresentation::kSimd128: // Fall through. |
550 case MachineRepresentation::kNone: | 554 case MachineRepresentation::kNone: |
551 UNREACHABLE(); | 555 UNREACHABLE(); |
552 return; | 556 return; |
553 } | 557 } |
554 Emit(opcode, g.NoOutput(), g.UseRegister(buffer), g.UseRegister(offset), | 558 Emit(opcode, g.NoOutput(), g.UseRegister(buffer), g.UseRegister(offset), |
555 g.UseOperand(length, kArithmeticImm), g.UseRegister(value)); | 559 g.UseOperand(length, kArithmeticImm), g.UseRegister(value)); |
556 } | 560 } |
557 | 561 |
558 | 562 |
559 template <typename Matcher> | 563 template <typename Matcher> |
(...skipping 1658 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2218 MachineOperatorBuilder::kFloat32RoundTiesEven | | 2222 MachineOperatorBuilder::kFloat32RoundTiesEven | |
2219 MachineOperatorBuilder::kFloat64RoundTiesEven | | 2223 MachineOperatorBuilder::kFloat64RoundTiesEven | |
2220 MachineOperatorBuilder::kWord32ShiftIsSafe | | 2224 MachineOperatorBuilder::kWord32ShiftIsSafe | |
2221 MachineOperatorBuilder::kInt32DivIsSafe | | 2225 MachineOperatorBuilder::kInt32DivIsSafe | |
2222 MachineOperatorBuilder::kUint32DivIsSafe; | 2226 MachineOperatorBuilder::kUint32DivIsSafe; |
2223 } | 2227 } |
2224 | 2228 |
2225 } // namespace compiler | 2229 } // namespace compiler |
2226 } // namespace internal | 2230 } // namespace internal |
2227 } // namespace v8 | 2231 } // namespace v8 |
OLD | NEW |