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 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
320 case MachineRepresentation::kWord8: | 320 case MachineRepresentation::kWord8: |
321 opcode = load_rep.IsUnsigned() ? kArmLdrb : kArmLdrsb; | 321 opcode = load_rep.IsUnsigned() ? kArmLdrb : kArmLdrsb; |
322 break; | 322 break; |
323 case MachineRepresentation::kWord16: | 323 case MachineRepresentation::kWord16: |
324 opcode = load_rep.IsUnsigned() ? kArmLdrh : kArmLdrsh; | 324 opcode = load_rep.IsUnsigned() ? kArmLdrh : kArmLdrsh; |
325 break; | 325 break; |
326 case MachineRepresentation::kTagged: // Fall through. | 326 case MachineRepresentation::kTagged: // Fall through. |
327 case MachineRepresentation::kWord32: | 327 case MachineRepresentation::kWord32: |
328 opcode = kArmLdr; | 328 opcode = kArmLdr; |
329 break; | 329 break; |
330 case MachineRepresentation::kNone: // Fall through. | 330 case MachineRepresentation::kWord64: // Fall through. |
331 case MachineRepresentation::kWord64: | 331 case MachineRepresentation::kSimd128: // Fall through. |
| 332 case MachineRepresentation::kNone: |
332 UNREACHABLE(); | 333 UNREACHABLE(); |
333 return; | 334 return; |
334 } | 335 } |
335 | 336 |
336 if (g.CanBeImmediate(index, opcode)) { | 337 if (g.CanBeImmediate(index, opcode)) { |
337 Emit(opcode | AddressingModeField::encode(kMode_Offset_RI), | 338 Emit(opcode | AddressingModeField::encode(kMode_Offset_RI), |
338 g.DefineAsRegister(node), g.UseRegister(base), g.UseImmediate(index)); | 339 g.DefineAsRegister(node), g.UseRegister(base), g.UseImmediate(index)); |
339 } else { | 340 } else { |
340 Emit(opcode | AddressingModeField::encode(kMode_Offset_RR), | 341 Emit(opcode | AddressingModeField::encode(kMode_Offset_RR), |
341 g.DefineAsRegister(node), g.UseRegister(base), g.UseRegister(index)); | 342 g.DefineAsRegister(node), g.UseRegister(base), g.UseRegister(index)); |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
405 case MachineRepresentation::kWord8: | 406 case MachineRepresentation::kWord8: |
406 opcode = kArmStrb; | 407 opcode = kArmStrb; |
407 break; | 408 break; |
408 case MachineRepresentation::kWord16: | 409 case MachineRepresentation::kWord16: |
409 opcode = kArmStrh; | 410 opcode = kArmStrh; |
410 break; | 411 break; |
411 case MachineRepresentation::kTagged: // Fall through. | 412 case MachineRepresentation::kTagged: // Fall through. |
412 case MachineRepresentation::kWord32: | 413 case MachineRepresentation::kWord32: |
413 opcode = kArmStr; | 414 opcode = kArmStr; |
414 break; | 415 break; |
415 case MachineRepresentation::kNone: // Fall through. | 416 case MachineRepresentation::kWord64: // Fall through. |
416 case MachineRepresentation::kWord64: | 417 case MachineRepresentation::kSimd128: // Fall through. |
| 418 case MachineRepresentation::kNone: |
417 UNREACHABLE(); | 419 UNREACHABLE(); |
418 return; | 420 return; |
419 } | 421 } |
420 | 422 |
421 if (g.CanBeImmediate(index, opcode)) { | 423 if (g.CanBeImmediate(index, opcode)) { |
422 Emit(opcode | AddressingModeField::encode(kMode_Offset_RI), g.NoOutput(), | 424 Emit(opcode | AddressingModeField::encode(kMode_Offset_RI), g.NoOutput(), |
423 g.UseRegister(base), g.UseImmediate(index), g.UseRegister(value)); | 425 g.UseRegister(base), g.UseImmediate(index), g.UseRegister(value)); |
424 } else { | 426 } else { |
425 Emit(opcode | AddressingModeField::encode(kMode_Offset_RR), g.NoOutput(), | 427 Emit(opcode | AddressingModeField::encode(kMode_Offset_RR), g.NoOutput(), |
426 g.UseRegister(base), g.UseRegister(index), g.UseRegister(value)); | 428 g.UseRegister(base), g.UseRegister(index), g.UseRegister(value)); |
(...skipping 18 matching lines...) Expand all Loading... |
445 break; | 447 break; |
446 case MachineRepresentation::kWord32: | 448 case MachineRepresentation::kWord32: |
447 opcode = kCheckedLoadWord32; | 449 opcode = kCheckedLoadWord32; |
448 break; | 450 break; |
449 case MachineRepresentation::kFloat32: | 451 case MachineRepresentation::kFloat32: |
450 opcode = kCheckedLoadFloat32; | 452 opcode = kCheckedLoadFloat32; |
451 break; | 453 break; |
452 case MachineRepresentation::kFloat64: | 454 case MachineRepresentation::kFloat64: |
453 opcode = kCheckedLoadFloat64; | 455 opcode = kCheckedLoadFloat64; |
454 break; | 456 break; |
455 case MachineRepresentation::kBit: // Fall through. | 457 case MachineRepresentation::kBit: // Fall through. |
456 case MachineRepresentation::kTagged: // Fall through. | 458 case MachineRepresentation::kTagged: // Fall through. |
457 case MachineRepresentation::kWord64: // Fall through. | 459 case MachineRepresentation::kWord64: // Fall through. |
| 460 case MachineRepresentation::kSimd128: // Fall through. |
458 case MachineRepresentation::kNone: | 461 case MachineRepresentation::kNone: |
459 UNREACHABLE(); | 462 UNREACHABLE(); |
460 return; | 463 return; |
461 } | 464 } |
462 InstructionOperand offset_operand = g.UseRegister(offset); | 465 InstructionOperand offset_operand = g.UseRegister(offset); |
463 InstructionOperand length_operand = g.CanBeImmediate(length, kArmCmp) | 466 InstructionOperand length_operand = g.CanBeImmediate(length, kArmCmp) |
464 ? g.UseImmediate(length) | 467 ? g.UseImmediate(length) |
465 : g.UseRegister(length); | 468 : g.UseRegister(length); |
466 Emit(opcode | AddressingModeField::encode(kMode_Offset_RR), | 469 Emit(opcode | AddressingModeField::encode(kMode_Offset_RR), |
467 g.DefineAsRegister(node), offset_operand, length_operand, | 470 g.DefineAsRegister(node), offset_operand, length_operand, |
(...skipping 18 matching lines...) Expand all Loading... |
486 break; | 489 break; |
487 case MachineRepresentation::kWord32: | 490 case MachineRepresentation::kWord32: |
488 opcode = kCheckedStoreWord32; | 491 opcode = kCheckedStoreWord32; |
489 break; | 492 break; |
490 case MachineRepresentation::kFloat32: | 493 case MachineRepresentation::kFloat32: |
491 opcode = kCheckedStoreFloat32; | 494 opcode = kCheckedStoreFloat32; |
492 break; | 495 break; |
493 case MachineRepresentation::kFloat64: | 496 case MachineRepresentation::kFloat64: |
494 opcode = kCheckedStoreFloat64; | 497 opcode = kCheckedStoreFloat64; |
495 break; | 498 break; |
496 case MachineRepresentation::kBit: // Fall through. | 499 case MachineRepresentation::kBit: // Fall through. |
497 case MachineRepresentation::kTagged: // Fall through. | 500 case MachineRepresentation::kTagged: // Fall through. |
498 case MachineRepresentation::kWord64: // Fall through. | 501 case MachineRepresentation::kWord64: // Fall through. |
| 502 case MachineRepresentation::kSimd128: // Fall through. |
499 case MachineRepresentation::kNone: | 503 case MachineRepresentation::kNone: |
500 UNREACHABLE(); | 504 UNREACHABLE(); |
501 return; | 505 return; |
502 } | 506 } |
503 InstructionOperand offset_operand = g.UseRegister(offset); | 507 InstructionOperand offset_operand = g.UseRegister(offset); |
504 InstructionOperand length_operand = g.CanBeImmediate(length, kArmCmp) | 508 InstructionOperand length_operand = g.CanBeImmediate(length, kArmCmp) |
505 ? g.UseImmediate(length) | 509 ? g.UseImmediate(length) |
506 : g.UseRegister(length); | 510 : g.UseRegister(length); |
507 Emit(opcode | AddressingModeField::encode(kMode_Offset_RR), g.NoOutput(), | 511 Emit(opcode | AddressingModeField::encode(kMode_Offset_RR), g.NoOutput(), |
508 offset_operand, length_operand, g.UseRegister(value), | 512 offset_operand, length_operand, g.UseRegister(value), |
(...skipping 1164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1673 MachineOperatorBuilder::kFloat64RoundTiesAway | | 1677 MachineOperatorBuilder::kFloat64RoundTiesAway | |
1674 MachineOperatorBuilder::kFloat32RoundTiesEven | | 1678 MachineOperatorBuilder::kFloat32RoundTiesEven | |
1675 MachineOperatorBuilder::kFloat64RoundTiesEven; | 1679 MachineOperatorBuilder::kFloat64RoundTiesEven; |
1676 } | 1680 } |
1677 return flags; | 1681 return flags; |
1678 } | 1682 } |
1679 | 1683 |
1680 } // namespace compiler | 1684 } // namespace compiler |
1681 } // namespace internal | 1685 } // namespace internal |
1682 } // namespace v8 | 1686 } // namespace v8 |
OLD | NEW |