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 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
395 case MachineRepresentation::kWord8: | 396 case MachineRepresentation::kWord8: |
396 opcode = kArmStrb; | 397 opcode = kArmStrb; |
397 break; | 398 break; |
398 case MachineRepresentation::kWord16: | 399 case MachineRepresentation::kWord16: |
399 opcode = kArmStrh; | 400 opcode = kArmStrh; |
400 break; | 401 break; |
401 case MachineRepresentation::kTagged: // Fall through. | 402 case MachineRepresentation::kTagged: // Fall through. |
402 case MachineRepresentation::kWord32: | 403 case MachineRepresentation::kWord32: |
403 opcode = kArmStr; | 404 opcode = kArmStr; |
404 break; | 405 break; |
405 case MachineRepresentation::kNone: // Fall through. | 406 case MachineRepresentation::kWord64: // Fall through. |
406 case MachineRepresentation::kWord64: | 407 case MachineRepresentation::kSimd128: // Fall through. |
| 408 case MachineRepresentation::kNone: |
407 UNREACHABLE(); | 409 UNREACHABLE(); |
408 return; | 410 return; |
409 } | 411 } |
410 | 412 |
411 if (g.CanBeImmediate(index, opcode)) { | 413 if (g.CanBeImmediate(index, opcode)) { |
412 Emit(opcode | AddressingModeField::encode(kMode_Offset_RI), g.NoOutput(), | 414 Emit(opcode | AddressingModeField::encode(kMode_Offset_RI), g.NoOutput(), |
413 g.UseRegister(base), g.UseImmediate(index), g.UseRegister(value)); | 415 g.UseRegister(base), g.UseImmediate(index), g.UseRegister(value)); |
414 } else { | 416 } else { |
415 Emit(opcode | AddressingModeField::encode(kMode_Offset_RR), g.NoOutput(), | 417 Emit(opcode | AddressingModeField::encode(kMode_Offset_RR), g.NoOutput(), |
416 g.UseRegister(base), g.UseRegister(index), g.UseRegister(value)); | 418 g.UseRegister(base), g.UseRegister(index), g.UseRegister(value)); |
(...skipping 18 matching lines...) Expand all Loading... |
435 break; | 437 break; |
436 case MachineRepresentation::kWord32: | 438 case MachineRepresentation::kWord32: |
437 opcode = kCheckedLoadWord32; | 439 opcode = kCheckedLoadWord32; |
438 break; | 440 break; |
439 case MachineRepresentation::kFloat32: | 441 case MachineRepresentation::kFloat32: |
440 opcode = kCheckedLoadFloat32; | 442 opcode = kCheckedLoadFloat32; |
441 break; | 443 break; |
442 case MachineRepresentation::kFloat64: | 444 case MachineRepresentation::kFloat64: |
443 opcode = kCheckedLoadFloat64; | 445 opcode = kCheckedLoadFloat64; |
444 break; | 446 break; |
445 case MachineRepresentation::kBit: // Fall through. | 447 case MachineRepresentation::kBit: // Fall through. |
446 case MachineRepresentation::kTagged: // Fall through. | 448 case MachineRepresentation::kTagged: // Fall through. |
447 case MachineRepresentation::kWord64: // Fall through. | 449 case MachineRepresentation::kWord64: // Fall through. |
| 450 case MachineRepresentation::kSimd128: // Fall through. |
448 case MachineRepresentation::kNone: | 451 case MachineRepresentation::kNone: |
449 UNREACHABLE(); | 452 UNREACHABLE(); |
450 return; | 453 return; |
451 } | 454 } |
452 InstructionOperand offset_operand = g.UseRegister(offset); | 455 InstructionOperand offset_operand = g.UseRegister(offset); |
453 InstructionOperand length_operand = g.CanBeImmediate(length, kArmCmp) | 456 InstructionOperand length_operand = g.CanBeImmediate(length, kArmCmp) |
454 ? g.UseImmediate(length) | 457 ? g.UseImmediate(length) |
455 : g.UseRegister(length); | 458 : g.UseRegister(length); |
456 Emit(opcode | AddressingModeField::encode(kMode_Offset_RR), | 459 Emit(opcode | AddressingModeField::encode(kMode_Offset_RR), |
457 g.DefineAsRegister(node), offset_operand, length_operand, | 460 g.DefineAsRegister(node), offset_operand, length_operand, |
(...skipping 18 matching lines...) Expand all Loading... |
476 break; | 479 break; |
477 case MachineRepresentation::kWord32: | 480 case MachineRepresentation::kWord32: |
478 opcode = kCheckedStoreWord32; | 481 opcode = kCheckedStoreWord32; |
479 break; | 482 break; |
480 case MachineRepresentation::kFloat32: | 483 case MachineRepresentation::kFloat32: |
481 opcode = kCheckedStoreFloat32; | 484 opcode = kCheckedStoreFloat32; |
482 break; | 485 break; |
483 case MachineRepresentation::kFloat64: | 486 case MachineRepresentation::kFloat64: |
484 opcode = kCheckedStoreFloat64; | 487 opcode = kCheckedStoreFloat64; |
485 break; | 488 break; |
486 case MachineRepresentation::kBit: // Fall through. | 489 case MachineRepresentation::kBit: // Fall through. |
487 case MachineRepresentation::kTagged: // Fall through. | 490 case MachineRepresentation::kTagged: // Fall through. |
488 case MachineRepresentation::kWord64: // Fall through. | 491 case MachineRepresentation::kWord64: // Fall through. |
| 492 case MachineRepresentation::kSimd128: // Fall through. |
489 case MachineRepresentation::kNone: | 493 case MachineRepresentation::kNone: |
490 UNREACHABLE(); | 494 UNREACHABLE(); |
491 return; | 495 return; |
492 } | 496 } |
493 InstructionOperand offset_operand = g.UseRegister(offset); | 497 InstructionOperand offset_operand = g.UseRegister(offset); |
494 InstructionOperand length_operand = g.CanBeImmediate(length, kArmCmp) | 498 InstructionOperand length_operand = g.CanBeImmediate(length, kArmCmp) |
495 ? g.UseImmediate(length) | 499 ? g.UseImmediate(length) |
496 : g.UseRegister(length); | 500 : g.UseRegister(length); |
497 Emit(opcode | AddressingModeField::encode(kMode_Offset_RR), g.NoOutput(), | 501 Emit(opcode | AddressingModeField::encode(kMode_Offset_RR), g.NoOutput(), |
498 offset_operand, length_operand, g.UseRegister(value), | 502 offset_operand, length_operand, g.UseRegister(value), |
(...skipping 1122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1621 MachineOperatorBuilder::kFloat64RoundTiesAway | | 1625 MachineOperatorBuilder::kFloat64RoundTiesAway | |
1622 MachineOperatorBuilder::kFloat32RoundTiesEven | | 1626 MachineOperatorBuilder::kFloat32RoundTiesEven | |
1623 MachineOperatorBuilder::kFloat64RoundTiesEven; | 1627 MachineOperatorBuilder::kFloat64RoundTiesEven; |
1624 } | 1628 } |
1625 return flags; | 1629 return flags; |
1626 } | 1630 } |
1627 | 1631 |
1628 } // namespace compiler | 1632 } // namespace compiler |
1629 } // namespace internal | 1633 } // namespace internal |
1630 } // namespace v8 | 1634 } // namespace v8 |
OLD | NEW |