Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(67)

Side by Side Diff: src/compiler/mips64/instruction-selector-mips64.cc

Issue 2801683003: MIPS[64]: Support for some SIMD operations (8) (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 376 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 break; 387 break;
388 case MachineRepresentation::kWord32: 388 case MachineRepresentation::kWord32:
389 opcode = load_rep.IsUnsigned() ? kMips64Lwu : kMips64Lw; 389 opcode = load_rep.IsUnsigned() ? kMips64Lwu : kMips64Lw;
390 break; 390 break;
391 case MachineRepresentation::kTaggedSigned: // Fall through. 391 case MachineRepresentation::kTaggedSigned: // Fall through.
392 case MachineRepresentation::kTaggedPointer: // Fall through. 392 case MachineRepresentation::kTaggedPointer: // Fall through.
393 case MachineRepresentation::kTagged: // Fall through. 393 case MachineRepresentation::kTagged: // Fall through.
394 case MachineRepresentation::kWord64: 394 case MachineRepresentation::kWord64:
395 opcode = kMips64Ld; 395 opcode = kMips64Ld;
396 break; 396 break;
397 case MachineRepresentation::kSimd128: // Fall through. 397 case MachineRepresentation::kSimd128:
398 opcode = kMips64MsaLd;
399 break;
398 case MachineRepresentation::kSimd1x4: // Fall through. 400 case MachineRepresentation::kSimd1x4: // Fall through.
399 case MachineRepresentation::kSimd1x8: // Fall through. 401 case MachineRepresentation::kSimd1x8: // Fall through.
400 case MachineRepresentation::kSimd1x16: // Fall through. 402 case MachineRepresentation::kSimd1x16: // Fall through.
401 case MachineRepresentation::kNone: 403 case MachineRepresentation::kNone:
402 UNREACHABLE(); 404 UNREACHABLE();
403 return; 405 return;
404 } 406 }
405 407
406 EmitLoad(this, node, opcode); 408 EmitLoad(this, node, opcode);
407 } 409 }
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
467 break; 469 break;
468 case MachineRepresentation::kWord32: 470 case MachineRepresentation::kWord32:
469 opcode = kMips64Sw; 471 opcode = kMips64Sw;
470 break; 472 break;
471 case MachineRepresentation::kTaggedSigned: // Fall through. 473 case MachineRepresentation::kTaggedSigned: // Fall through.
472 case MachineRepresentation::kTaggedPointer: // Fall through. 474 case MachineRepresentation::kTaggedPointer: // Fall through.
473 case MachineRepresentation::kTagged: // Fall through. 475 case MachineRepresentation::kTagged: // Fall through.
474 case MachineRepresentation::kWord64: 476 case MachineRepresentation::kWord64:
475 opcode = kMips64Sd; 477 opcode = kMips64Sd;
476 break; 478 break;
477 case MachineRepresentation::kSimd128: // Fall through. 479 case MachineRepresentation::kSimd128:
480 opcode = kMips64MsaSt;
481 break;
478 case MachineRepresentation::kSimd1x4: // Fall through. 482 case MachineRepresentation::kSimd1x4: // Fall through.
479 case MachineRepresentation::kSimd1x8: // Fall through. 483 case MachineRepresentation::kSimd1x8: // Fall through.
480 case MachineRepresentation::kSimd1x16: // Fall through. 484 case MachineRepresentation::kSimd1x16: // Fall through.
481 case MachineRepresentation::kNone: 485 case MachineRepresentation::kNone:
482 UNREACHABLE(); 486 UNREACHABLE();
483 return; 487 return;
484 } 488 }
485 489
486 if (g.CanBeImmediate(index, opcode)) { 490 if (g.CanBeImmediate(index, opcode)) {
487 Emit(opcode | AddressingModeField::encode(kMode_MRI), g.NoOutput(), 491 Emit(opcode | AddressingModeField::encode(kMode_MRI), g.NoOutput(),
(...skipping 1273 matching lines...) Expand 10 before | Expand all | Expand 10 after
1761 break; 1765 break;
1762 case MachineRepresentation::kWord32: 1766 case MachineRepresentation::kWord32:
1763 opcode = load_rep.IsUnsigned() ? kMips64Ulwu : kMips64Ulw; 1767 opcode = load_rep.IsUnsigned() ? kMips64Ulwu : kMips64Ulw;
1764 break; 1768 break;
1765 case MachineRepresentation::kTaggedSigned: // Fall through. 1769 case MachineRepresentation::kTaggedSigned: // Fall through.
1766 case MachineRepresentation::kTaggedPointer: // Fall through. 1770 case MachineRepresentation::kTaggedPointer: // Fall through.
1767 case MachineRepresentation::kTagged: // Fall through. 1771 case MachineRepresentation::kTagged: // Fall through.
1768 case MachineRepresentation::kWord64: 1772 case MachineRepresentation::kWord64:
1769 opcode = kMips64Uld; 1773 opcode = kMips64Uld;
1770 break; 1774 break;
1771 case MachineRepresentation::kSimd128: // Fall through. 1775 case MachineRepresentation::kSimd128:
1776 opcode = kMips64MsaLd;
1777 break;
1772 case MachineRepresentation::kSimd1x4: // Fall through. 1778 case MachineRepresentation::kSimd1x4: // Fall through.
1773 case MachineRepresentation::kSimd1x8: // Fall through. 1779 case MachineRepresentation::kSimd1x8: // Fall through.
1774 case MachineRepresentation::kSimd1x16: // Fall through. 1780 case MachineRepresentation::kSimd1x16: // Fall through.
1775 case MachineRepresentation::kNone: 1781 case MachineRepresentation::kNone:
1776 UNREACHABLE(); 1782 UNREACHABLE();
1777 return; 1783 return;
1778 } 1784 }
1779 1785
1780 if (g.CanBeImmediate(index, opcode)) { 1786 if (g.CanBeImmediate(index, opcode)) {
1781 Emit(opcode | AddressingModeField::encode(kMode_MRI), 1787 Emit(opcode | AddressingModeField::encode(kMode_MRI),
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1814 break; 1820 break;
1815 case MachineRepresentation::kWord32: 1821 case MachineRepresentation::kWord32:
1816 opcode = kMips64Usw; 1822 opcode = kMips64Usw;
1817 break; 1823 break;
1818 case MachineRepresentation::kTaggedSigned: // Fall through. 1824 case MachineRepresentation::kTaggedSigned: // Fall through.
1819 case MachineRepresentation::kTaggedPointer: // Fall through. 1825 case MachineRepresentation::kTaggedPointer: // Fall through.
1820 case MachineRepresentation::kTagged: // Fall through. 1826 case MachineRepresentation::kTagged: // Fall through.
1821 case MachineRepresentation::kWord64: 1827 case MachineRepresentation::kWord64:
1822 opcode = kMips64Usd; 1828 opcode = kMips64Usd;
1823 break; 1829 break;
1824 case MachineRepresentation::kSimd128: // Fall through. 1830 case MachineRepresentation::kSimd128:
1831 opcode = kMips64MsaSt;
1832 break;
1825 case MachineRepresentation::kSimd1x4: // Fall through. 1833 case MachineRepresentation::kSimd1x4: // Fall through.
1826 case MachineRepresentation::kSimd1x8: // Fall through. 1834 case MachineRepresentation::kSimd1x8: // Fall through.
1827 case MachineRepresentation::kSimd1x16: // Fall through. 1835 case MachineRepresentation::kSimd1x16: // Fall through.
1828 case MachineRepresentation::kNone: 1836 case MachineRepresentation::kNone:
1829 UNREACHABLE(); 1837 UNREACHABLE();
1830 return; 1838 return;
1831 } 1839 }
1832 1840
1833 if (g.CanBeImmediate(index, opcode)) { 1841 if (g.CanBeImmediate(index, opcode)) {
1834 Emit(opcode | AddressingModeField::encode(kMode_MRI), g.NoOutput(), 1842 Emit(opcode | AddressingModeField::encode(kMode_MRI), g.NoOutput(),
(...skipping 884 matching lines...) Expand 10 before | Expand all | Expand 10 after
2719 } 2727 }
2720 2728
2721 void InstructionSelector::VisitF32x4SConvertI32x4(Node* node) { 2729 void InstructionSelector::VisitF32x4SConvertI32x4(Node* node) {
2722 VisitRR(this, kMips64F32x4SConvertI32x4, node); 2730 VisitRR(this, kMips64F32x4SConvertI32x4, node);
2723 } 2731 }
2724 2732
2725 void InstructionSelector::VisitF32x4UConvertI32x4(Node* node) { 2733 void InstructionSelector::VisitF32x4UConvertI32x4(Node* node) {
2726 VisitRR(this, kMips64F32x4UConvertI32x4, node); 2734 VisitRR(this, kMips64F32x4UConvertI32x4, node);
2727 } 2735 }
2728 2736
2737 void InstructionSelector::VisitS1x4And(Node* node) {
2738 VisitRRR(this, kMips64S128And, node);
2739 }
2740
2741 void InstructionSelector::VisitS1x4Or(Node* node) {
2742 VisitRRR(this, kMips64S128Or, node);
2743 }
2744
2745 void InstructionSelector::VisitS1x4Xor(Node* node) {
2746 VisitRRR(this, kMips64S128Xor, node);
2747 }
2748
2749 void InstructionSelector::VisitS1x4Not(Node* node) {
2750 VisitRR(this, kMips64S128Not, node);
2751 }
2752
2753 void InstructionSelector::VisitS1x4AnyTrue(Node* node) {
2754 VisitRR(this, kMips64S1x4AnyTrue, node);
2755 }
2756
2757 void InstructionSelector::VisitS1x4AllTrue(Node* node) {
2758 VisitRR(this, kMips64S1x4AllTrue, node);
2759 }
2760
2761 void InstructionSelector::VisitS1x8And(Node* node) {
2762 VisitRRR(this, kMips64S128And, node);
2763 }
2764
2765 void InstructionSelector::VisitS1x8Or(Node* node) {
2766 VisitRRR(this, kMips64S128Or, node);
2767 }
2768
2769 void InstructionSelector::VisitS1x8Xor(Node* node) {
2770 VisitRRR(this, kMips64S128Xor, node);
2771 }
2772
2773 void InstructionSelector::VisitS1x8Not(Node* node) {
2774 VisitRR(this, kMips64S128Not, node);
2775 }
2776
2777 void InstructionSelector::VisitS1x8AnyTrue(Node* node) {
2778 VisitRR(this, kMips64S1x8AnyTrue, node);
2779 }
2780
2781 void InstructionSelector::VisitS1x8AllTrue(Node* node) {
2782 VisitRR(this, kMips64S1x8AllTrue, node);
2783 }
2784
2785 void InstructionSelector::VisitS1x16And(Node* node) {
2786 VisitRRR(this, kMips64S128And, node);
2787 }
2788
2789 void InstructionSelector::VisitS1x16Or(Node* node) {
2790 VisitRRR(this, kMips64S128Or, node);
2791 }
2792
2793 void InstructionSelector::VisitS1x16Xor(Node* node) {
2794 VisitRRR(this, kMips64S128Xor, node);
2795 }
2796
2797 void InstructionSelector::VisitS1x16Not(Node* node) {
2798 VisitRR(this, kMips64S128Not, node);
2799 }
2800
2801 void InstructionSelector::VisitS1x16AnyTrue(Node* node) {
2802 VisitRR(this, kMips64S1x16AnyTrue, node);
2803 }
2804
2805 void InstructionSelector::VisitS1x16AllTrue(Node* node) {
2806 VisitRR(this, kMips64S1x16AllTrue, node);
2807 }
2808
2729 // static 2809 // static
2730 MachineOperatorBuilder::Flags 2810 MachineOperatorBuilder::Flags
2731 InstructionSelector::SupportedMachineOperatorFlags() { 2811 InstructionSelector::SupportedMachineOperatorFlags() {
2732 MachineOperatorBuilder::Flags flags = MachineOperatorBuilder::kNoFlags; 2812 MachineOperatorBuilder::Flags flags = MachineOperatorBuilder::kNoFlags;
2733 return flags | MachineOperatorBuilder::kWord32Ctz | 2813 return flags | MachineOperatorBuilder::kWord32Ctz |
2734 MachineOperatorBuilder::kWord64Ctz | 2814 MachineOperatorBuilder::kWord64Ctz |
2735 MachineOperatorBuilder::kWord32Popcnt | 2815 MachineOperatorBuilder::kWord32Popcnt |
2736 MachineOperatorBuilder::kWord64Popcnt | 2816 MachineOperatorBuilder::kWord64Popcnt |
2737 MachineOperatorBuilder::kWord32ShiftIsSafe | 2817 MachineOperatorBuilder::kWord32ShiftIsSafe |
2738 MachineOperatorBuilder::kInt32DivIsSafe | 2818 MachineOperatorBuilder::kInt32DivIsSafe |
(...skipping 19 matching lines...) Expand all
2758 } else { 2838 } else {
2759 DCHECK(kArchVariant == kMips64r2); 2839 DCHECK(kArchVariant == kMips64r2);
2760 return MachineOperatorBuilder::AlignmentRequirements:: 2840 return MachineOperatorBuilder::AlignmentRequirements::
2761 NoUnalignedAccessSupport(); 2841 NoUnalignedAccessSupport();
2762 } 2842 }
2763 } 2843 }
2764 2844
2765 } // namespace compiler 2845 } // namespace compiler
2766 } // namespace internal 2846 } // namespace internal
2767 } // namespace v8 2847 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698