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 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
372 case MachineRepresentation::kWord32: | 372 case MachineRepresentation::kWord32: |
373 opcode = load_rep.IsUnsigned() ? kMips64Lwu : kMips64Lw; | 373 opcode = load_rep.IsUnsigned() ? kMips64Lwu : kMips64Lw; |
374 break; | 374 break; |
375 case MachineRepresentation::kTaggedSigned: // Fall through. | 375 case MachineRepresentation::kTaggedSigned: // Fall through. |
376 case MachineRepresentation::kTaggedPointer: // Fall through. | 376 case MachineRepresentation::kTaggedPointer: // Fall through. |
377 case MachineRepresentation::kTagged: // Fall through. | 377 case MachineRepresentation::kTagged: // Fall through. |
378 case MachineRepresentation::kWord64: | 378 case MachineRepresentation::kWord64: |
379 opcode = kMips64Ld; | 379 opcode = kMips64Ld; |
380 break; | 380 break; |
381 case MachineRepresentation::kSimd128: // Fall through. | 381 case MachineRepresentation::kSimd128: // Fall through. |
| 382 case MachineRepresentation::kSimd1x4: // Fall through. |
| 383 case MachineRepresentation::kSimd1x8: // Fall through. |
| 384 case MachineRepresentation::kSimd1x16: // Fall through. |
382 case MachineRepresentation::kNone: | 385 case MachineRepresentation::kNone: |
383 UNREACHABLE(); | 386 UNREACHABLE(); |
384 return; | 387 return; |
385 } | 388 } |
386 | 389 |
387 EmitLoad(this, node, opcode); | 390 EmitLoad(this, node, opcode); |
388 } | 391 } |
389 | 392 |
390 void InstructionSelector::VisitProtectedLoad(Node* node) { | 393 void InstructionSelector::VisitProtectedLoad(Node* node) { |
391 // TODO(eholk) | 394 // TODO(eholk) |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
449 case MachineRepresentation::kWord32: | 452 case MachineRepresentation::kWord32: |
450 opcode = kMips64Sw; | 453 opcode = kMips64Sw; |
451 break; | 454 break; |
452 case MachineRepresentation::kTaggedSigned: // Fall through. | 455 case MachineRepresentation::kTaggedSigned: // Fall through. |
453 case MachineRepresentation::kTaggedPointer: // Fall through. | 456 case MachineRepresentation::kTaggedPointer: // Fall through. |
454 case MachineRepresentation::kTagged: // Fall through. | 457 case MachineRepresentation::kTagged: // Fall through. |
455 case MachineRepresentation::kWord64: | 458 case MachineRepresentation::kWord64: |
456 opcode = kMips64Sd; | 459 opcode = kMips64Sd; |
457 break; | 460 break; |
458 case MachineRepresentation::kSimd128: // Fall through. | 461 case MachineRepresentation::kSimd128: // Fall through. |
| 462 case MachineRepresentation::kSimd1x4: // Fall through. |
| 463 case MachineRepresentation::kSimd1x8: // Fall through. |
| 464 case MachineRepresentation::kSimd1x16: // Fall through. |
459 case MachineRepresentation::kNone: | 465 case MachineRepresentation::kNone: |
460 UNREACHABLE(); | 466 UNREACHABLE(); |
461 return; | 467 return; |
462 } | 468 } |
463 | 469 |
464 if (g.CanBeImmediate(index, opcode)) { | 470 if (g.CanBeImmediate(index, opcode)) { |
465 Emit(opcode | AddressingModeField::encode(kMode_MRI), g.NoOutput(), | 471 Emit(opcode | AddressingModeField::encode(kMode_MRI), g.NoOutput(), |
466 g.UseRegister(base), g.UseImmediate(index), | 472 g.UseRegister(base), g.UseImmediate(index), |
467 g.UseRegisterOrImmediateZero(value)); | 473 g.UseRegisterOrImmediateZero(value)); |
468 } else { | 474 } else { |
(...skipping 1263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1732 case MachineRepresentation::kWord32: | 1738 case MachineRepresentation::kWord32: |
1733 opcode = load_rep.IsUnsigned() ? kMips64Ulwu : kMips64Ulw; | 1739 opcode = load_rep.IsUnsigned() ? kMips64Ulwu : kMips64Ulw; |
1734 break; | 1740 break; |
1735 case MachineRepresentation::kTaggedSigned: // Fall through. | 1741 case MachineRepresentation::kTaggedSigned: // Fall through. |
1736 case MachineRepresentation::kTaggedPointer: // Fall through. | 1742 case MachineRepresentation::kTaggedPointer: // Fall through. |
1737 case MachineRepresentation::kTagged: // Fall through. | 1743 case MachineRepresentation::kTagged: // Fall through. |
1738 case MachineRepresentation::kWord64: | 1744 case MachineRepresentation::kWord64: |
1739 opcode = kMips64Uld; | 1745 opcode = kMips64Uld; |
1740 break; | 1746 break; |
1741 case MachineRepresentation::kSimd128: // Fall through. | 1747 case MachineRepresentation::kSimd128: // Fall through. |
| 1748 case MachineRepresentation::kSimd1x4: // Fall through. |
| 1749 case MachineRepresentation::kSimd1x8: // Fall through. |
| 1750 case MachineRepresentation::kSimd1x16: // Fall through. |
1742 case MachineRepresentation::kNone: | 1751 case MachineRepresentation::kNone: |
1743 UNREACHABLE(); | 1752 UNREACHABLE(); |
1744 return; | 1753 return; |
1745 } | 1754 } |
1746 | 1755 |
1747 if (g.CanBeImmediate(index, opcode)) { | 1756 if (g.CanBeImmediate(index, opcode)) { |
1748 Emit(opcode | AddressingModeField::encode(kMode_MRI), | 1757 Emit(opcode | AddressingModeField::encode(kMode_MRI), |
1749 g.DefineAsRegister(node), g.UseRegister(base), g.UseImmediate(index)); | 1758 g.DefineAsRegister(node), g.UseRegister(base), g.UseImmediate(index)); |
1750 } else { | 1759 } else { |
1751 InstructionOperand addr_reg = g.TempRegister(); | 1760 InstructionOperand addr_reg = g.TempRegister(); |
(...skipping 30 matching lines...) Expand all Loading... |
1782 case MachineRepresentation::kWord32: | 1791 case MachineRepresentation::kWord32: |
1783 opcode = kMips64Usw; | 1792 opcode = kMips64Usw; |
1784 break; | 1793 break; |
1785 case MachineRepresentation::kTaggedSigned: // Fall through. | 1794 case MachineRepresentation::kTaggedSigned: // Fall through. |
1786 case MachineRepresentation::kTaggedPointer: // Fall through. | 1795 case MachineRepresentation::kTaggedPointer: // Fall through. |
1787 case MachineRepresentation::kTagged: // Fall through. | 1796 case MachineRepresentation::kTagged: // Fall through. |
1788 case MachineRepresentation::kWord64: | 1797 case MachineRepresentation::kWord64: |
1789 opcode = kMips64Usd; | 1798 opcode = kMips64Usd; |
1790 break; | 1799 break; |
1791 case MachineRepresentation::kSimd128: // Fall through. | 1800 case MachineRepresentation::kSimd128: // Fall through. |
| 1801 case MachineRepresentation::kSimd1x4: // Fall through. |
| 1802 case MachineRepresentation::kSimd1x8: // Fall through. |
| 1803 case MachineRepresentation::kSimd1x16: // Fall through. |
1792 case MachineRepresentation::kNone: | 1804 case MachineRepresentation::kNone: |
1793 UNREACHABLE(); | 1805 UNREACHABLE(); |
1794 return; | 1806 return; |
1795 } | 1807 } |
1796 | 1808 |
1797 if (g.CanBeImmediate(index, opcode)) { | 1809 if (g.CanBeImmediate(index, opcode)) { |
1798 Emit(opcode | AddressingModeField::encode(kMode_MRI), g.NoOutput(), | 1810 Emit(opcode | AddressingModeField::encode(kMode_MRI), g.NoOutput(), |
1799 g.UseRegister(base), g.UseImmediate(index), | 1811 g.UseRegister(base), g.UseImmediate(index), |
1800 g.UseRegisterOrImmediateZero(value)); | 1812 g.UseRegisterOrImmediateZero(value)); |
1801 } else { | 1813 } else { |
(...skipping 30 matching lines...) Expand all Loading... |
1832 opcode = kCheckedLoadFloat32; | 1844 opcode = kCheckedLoadFloat32; |
1833 break; | 1845 break; |
1834 case MachineRepresentation::kFloat64: | 1846 case MachineRepresentation::kFloat64: |
1835 opcode = kCheckedLoadFloat64; | 1847 opcode = kCheckedLoadFloat64; |
1836 break; | 1848 break; |
1837 case MachineRepresentation::kBit: | 1849 case MachineRepresentation::kBit: |
1838 case MachineRepresentation::kTaggedSigned: // Fall through. | 1850 case MachineRepresentation::kTaggedSigned: // Fall through. |
1839 case MachineRepresentation::kTaggedPointer: // Fall through. | 1851 case MachineRepresentation::kTaggedPointer: // Fall through. |
1840 case MachineRepresentation::kTagged: | 1852 case MachineRepresentation::kTagged: |
1841 case MachineRepresentation::kSimd128: | 1853 case MachineRepresentation::kSimd128: |
| 1854 case MachineRepresentation::kSimd1x4: // Fall through. |
| 1855 case MachineRepresentation::kSimd1x8: // Fall through. |
| 1856 case MachineRepresentation::kSimd1x16: // Fall through. |
1842 case MachineRepresentation::kNone: | 1857 case MachineRepresentation::kNone: |
1843 UNREACHABLE(); | 1858 UNREACHABLE(); |
1844 return; | 1859 return; |
1845 } | 1860 } |
1846 InstructionOperand offset_operand = g.CanBeImmediate(offset, opcode) | 1861 InstructionOperand offset_operand = g.CanBeImmediate(offset, opcode) |
1847 ? g.UseImmediate(offset) | 1862 ? g.UseImmediate(offset) |
1848 : g.UseRegister(offset); | 1863 : g.UseRegister(offset); |
1849 | 1864 |
1850 InstructionOperand length_operand = (!g.CanBeImmediate(offset, opcode)) | 1865 InstructionOperand length_operand = (!g.CanBeImmediate(offset, opcode)) |
1851 ? g.CanBeImmediate(length, opcode) | 1866 ? g.CanBeImmediate(length, opcode) |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1893 opcode = kCheckedStoreFloat32; | 1908 opcode = kCheckedStoreFloat32; |
1894 break; | 1909 break; |
1895 case MachineRepresentation::kFloat64: | 1910 case MachineRepresentation::kFloat64: |
1896 opcode = kCheckedStoreFloat64; | 1911 opcode = kCheckedStoreFloat64; |
1897 break; | 1912 break; |
1898 case MachineRepresentation::kBit: | 1913 case MachineRepresentation::kBit: |
1899 case MachineRepresentation::kTaggedSigned: // Fall through. | 1914 case MachineRepresentation::kTaggedSigned: // Fall through. |
1900 case MachineRepresentation::kTaggedPointer: // Fall through. | 1915 case MachineRepresentation::kTaggedPointer: // Fall through. |
1901 case MachineRepresentation::kTagged: | 1916 case MachineRepresentation::kTagged: |
1902 case MachineRepresentation::kSimd128: | 1917 case MachineRepresentation::kSimd128: |
| 1918 case MachineRepresentation::kSimd1x4: // Fall through. |
| 1919 case MachineRepresentation::kSimd1x8: // Fall through. |
| 1920 case MachineRepresentation::kSimd1x16: // Fall through. |
1903 case MachineRepresentation::kNone: | 1921 case MachineRepresentation::kNone: |
1904 UNREACHABLE(); | 1922 UNREACHABLE(); |
1905 return; | 1923 return; |
1906 } | 1924 } |
1907 InstructionOperand offset_operand = g.CanBeImmediate(offset, opcode) | 1925 InstructionOperand offset_operand = g.CanBeImmediate(offset, opcode) |
1908 ? g.UseImmediate(offset) | 1926 ? g.UseImmediate(offset) |
1909 : g.UseRegister(offset); | 1927 : g.UseRegister(offset); |
1910 | 1928 |
1911 InstructionOperand length_operand = (!g.CanBeImmediate(offset, opcode)) | 1929 InstructionOperand length_operand = (!g.CanBeImmediate(offset, opcode)) |
1912 ? g.CanBeImmediate(length, opcode) | 1930 ? g.CanBeImmediate(length, opcode) |
(...skipping 729 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2642 } else { | 2660 } else { |
2643 DCHECK(kArchVariant == kMips64r2); | 2661 DCHECK(kArchVariant == kMips64r2); |
2644 return MachineOperatorBuilder::AlignmentRequirements:: | 2662 return MachineOperatorBuilder::AlignmentRequirements:: |
2645 NoUnalignedAccessSupport(); | 2663 NoUnalignedAccessSupport(); |
2646 } | 2664 } |
2647 } | 2665 } |
2648 | 2666 |
2649 } // namespace compiler | 2667 } // namespace compiler |
2650 } // namespace internal | 2668 } // namespace internal |
2651 } // namespace v8 | 2669 } // namespace v8 |
OLD | NEW |