| 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 |