| 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 1670 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2230 MachineOperatorBuilder::kWord32ShiftIsSafe | | 2234 MachineOperatorBuilder::kWord32ShiftIsSafe | |
| 2231 MachineOperatorBuilder::kInt32DivIsSafe | | 2235 MachineOperatorBuilder::kInt32DivIsSafe | |
| 2232 MachineOperatorBuilder::kUint32DivIsSafe | | 2236 MachineOperatorBuilder::kUint32DivIsSafe | |
| 2233 MachineOperatorBuilder::kWord32ReverseBits | | 2237 MachineOperatorBuilder::kWord32ReverseBits | |
| 2234 MachineOperatorBuilder::kWord64ReverseBits; | 2238 MachineOperatorBuilder::kWord64ReverseBits; |
| 2235 } | 2239 } |
| 2236 | 2240 |
| 2237 } // namespace compiler | 2241 } // namespace compiler |
| 2238 } // namespace internal | 2242 } // namespace internal |
| 2239 } // namespace v8 | 2243 } // namespace v8 |
| OLD | NEW |