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

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

Issue 2801683003: MIPS[64]: Support for some SIMD operations (8) (Closed)
Patch Set: Rebase Created 3 years, 6 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
« no previous file with comments | « src/compiler/mips64/instruction-codes-mips64.h ('k') | src/mips/assembler-mips.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 393 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 break; 404 break;
405 case MachineRepresentation::kWord32: 405 case MachineRepresentation::kWord32:
406 opcode = load_rep.IsUnsigned() ? kMips64Lwu : kMips64Lw; 406 opcode = load_rep.IsUnsigned() ? kMips64Lwu : kMips64Lw;
407 break; 407 break;
408 case MachineRepresentation::kTaggedSigned: // Fall through. 408 case MachineRepresentation::kTaggedSigned: // Fall through.
409 case MachineRepresentation::kTaggedPointer: // Fall through. 409 case MachineRepresentation::kTaggedPointer: // Fall through.
410 case MachineRepresentation::kTagged: // Fall through. 410 case MachineRepresentation::kTagged: // Fall through.
411 case MachineRepresentation::kWord64: 411 case MachineRepresentation::kWord64:
412 opcode = kMips64Ld; 412 opcode = kMips64Ld;
413 break; 413 break;
414 case MachineRepresentation::kSimd128: // Fall through. 414 case MachineRepresentation::kSimd128:
415 opcode = kMips64MsaLd;
416 break;
415 case MachineRepresentation::kSimd1x4: // Fall through. 417 case MachineRepresentation::kSimd1x4: // Fall through.
416 case MachineRepresentation::kSimd1x8: // Fall through. 418 case MachineRepresentation::kSimd1x8: // Fall through.
417 case MachineRepresentation::kSimd1x16: // Fall through. 419 case MachineRepresentation::kSimd1x16: // Fall through.
418 case MachineRepresentation::kNone: 420 case MachineRepresentation::kNone:
419 UNREACHABLE(); 421 UNREACHABLE();
420 return; 422 return;
421 } 423 }
422 424
423 EmitLoad(this, node, opcode); 425 EmitLoad(this, node, opcode);
424 } 426 }
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
484 break; 486 break;
485 case MachineRepresentation::kWord32: 487 case MachineRepresentation::kWord32:
486 opcode = kMips64Sw; 488 opcode = kMips64Sw;
487 break; 489 break;
488 case MachineRepresentation::kTaggedSigned: // Fall through. 490 case MachineRepresentation::kTaggedSigned: // Fall through.
489 case MachineRepresentation::kTaggedPointer: // Fall through. 491 case MachineRepresentation::kTaggedPointer: // Fall through.
490 case MachineRepresentation::kTagged: // Fall through. 492 case MachineRepresentation::kTagged: // Fall through.
491 case MachineRepresentation::kWord64: 493 case MachineRepresentation::kWord64:
492 opcode = kMips64Sd; 494 opcode = kMips64Sd;
493 break; 495 break;
494 case MachineRepresentation::kSimd128: // Fall through. 496 case MachineRepresentation::kSimd128:
497 opcode = kMips64MsaSt;
498 break;
495 case MachineRepresentation::kSimd1x4: // Fall through. 499 case MachineRepresentation::kSimd1x4: // Fall through.
496 case MachineRepresentation::kSimd1x8: // Fall through. 500 case MachineRepresentation::kSimd1x8: // Fall through.
497 case MachineRepresentation::kSimd1x16: // Fall through. 501 case MachineRepresentation::kSimd1x16: // Fall through.
498 case MachineRepresentation::kNone: 502 case MachineRepresentation::kNone:
499 UNREACHABLE(); 503 UNREACHABLE();
500 return; 504 return;
501 } 505 }
502 506
503 if (g.CanBeImmediate(index, opcode)) { 507 if (g.CanBeImmediate(index, opcode)) {
504 Emit(opcode | AddressingModeField::encode(kMode_MRI), g.NoOutput(), 508 Emit(opcode | AddressingModeField::encode(kMode_MRI), g.NoOutput(),
(...skipping 1273 matching lines...) Expand 10 before | Expand all | Expand 10 after
1778 break; 1782 break;
1779 case MachineRepresentation::kWord32: 1783 case MachineRepresentation::kWord32:
1780 opcode = load_rep.IsUnsigned() ? kMips64Ulwu : kMips64Ulw; 1784 opcode = load_rep.IsUnsigned() ? kMips64Ulwu : kMips64Ulw;
1781 break; 1785 break;
1782 case MachineRepresentation::kTaggedSigned: // Fall through. 1786 case MachineRepresentation::kTaggedSigned: // Fall through.
1783 case MachineRepresentation::kTaggedPointer: // Fall through. 1787 case MachineRepresentation::kTaggedPointer: // Fall through.
1784 case MachineRepresentation::kTagged: // Fall through. 1788 case MachineRepresentation::kTagged: // Fall through.
1785 case MachineRepresentation::kWord64: 1789 case MachineRepresentation::kWord64:
1786 opcode = kMips64Uld; 1790 opcode = kMips64Uld;
1787 break; 1791 break;
1788 case MachineRepresentation::kSimd128: // Fall through. 1792 case MachineRepresentation::kSimd128:
1793 opcode = kMips64MsaLd;
1794 break;
1789 case MachineRepresentation::kSimd1x4: // Fall through. 1795 case MachineRepresentation::kSimd1x4: // Fall through.
1790 case MachineRepresentation::kSimd1x8: // Fall through. 1796 case MachineRepresentation::kSimd1x8: // Fall through.
1791 case MachineRepresentation::kSimd1x16: // Fall through. 1797 case MachineRepresentation::kSimd1x16: // Fall through.
1792 case MachineRepresentation::kNone: 1798 case MachineRepresentation::kNone:
1793 UNREACHABLE(); 1799 UNREACHABLE();
1794 return; 1800 return;
1795 } 1801 }
1796 1802
1797 if (g.CanBeImmediate(index, opcode)) { 1803 if (g.CanBeImmediate(index, opcode)) {
1798 Emit(opcode | AddressingModeField::encode(kMode_MRI), 1804 Emit(opcode | AddressingModeField::encode(kMode_MRI),
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1831 break; 1837 break;
1832 case MachineRepresentation::kWord32: 1838 case MachineRepresentation::kWord32:
1833 opcode = kMips64Usw; 1839 opcode = kMips64Usw;
1834 break; 1840 break;
1835 case MachineRepresentation::kTaggedSigned: // Fall through. 1841 case MachineRepresentation::kTaggedSigned: // Fall through.
1836 case MachineRepresentation::kTaggedPointer: // Fall through. 1842 case MachineRepresentation::kTaggedPointer: // Fall through.
1837 case MachineRepresentation::kTagged: // Fall through. 1843 case MachineRepresentation::kTagged: // Fall through.
1838 case MachineRepresentation::kWord64: 1844 case MachineRepresentation::kWord64:
1839 opcode = kMips64Usd; 1845 opcode = kMips64Usd;
1840 break; 1846 break;
1841 case MachineRepresentation::kSimd128: // Fall through. 1847 case MachineRepresentation::kSimd128:
1848 opcode = kMips64MsaSt;
1849 break;
1842 case MachineRepresentation::kSimd1x4: // Fall through. 1850 case MachineRepresentation::kSimd1x4: // Fall through.
1843 case MachineRepresentation::kSimd1x8: // Fall through. 1851 case MachineRepresentation::kSimd1x8: // Fall through.
1844 case MachineRepresentation::kSimd1x16: // Fall through. 1852 case MachineRepresentation::kSimd1x16: // Fall through.
1845 case MachineRepresentation::kNone: 1853 case MachineRepresentation::kNone:
1846 UNREACHABLE(); 1854 UNREACHABLE();
1847 return; 1855 return;
1848 } 1856 }
1849 1857
1850 if (g.CanBeImmediate(index, opcode)) { 1858 if (g.CanBeImmediate(index, opcode)) {
1851 Emit(opcode | AddressingModeField::encode(kMode_MRI), g.NoOutput(), 1859 Emit(opcode | AddressingModeField::encode(kMode_MRI), g.NoOutput(),
(...skipping 1234 matching lines...) Expand 10 before | Expand all | Expand 10 after
3086 } 3094 }
3087 3095
3088 void InstructionSelector::VisitS128Xor(Node* node) { 3096 void InstructionSelector::VisitS128Xor(Node* node) {
3089 VisitRRR(this, kMips64S128Xor, node); 3097 VisitRRR(this, kMips64S128Xor, node);
3090 } 3098 }
3091 3099
3092 void InstructionSelector::VisitS128Not(Node* node) { 3100 void InstructionSelector::VisitS128Not(Node* node) {
3093 VisitRR(this, kMips64S128Not, node); 3101 VisitRR(this, kMips64S128Not, node);
3094 } 3102 }
3095 3103
3104 void InstructionSelector::VisitS1x4And(Node* node) {
3105 VisitRRR(this, kMips64S128And, node);
3106 }
3107
3108 void InstructionSelector::VisitS1x4Or(Node* node) {
3109 VisitRRR(this, kMips64S128Or, node);
3110 }
3111
3112 void InstructionSelector::VisitS1x4Xor(Node* node) {
3113 VisitRRR(this, kMips64S128Xor, node);
3114 }
3115
3116 void InstructionSelector::VisitS1x4Not(Node* node) {
3117 VisitRR(this, kMips64S128Not, node);
3118 }
3119
3120 void InstructionSelector::VisitS1x4AnyTrue(Node* node) {
3121 VisitRR(this, kMips64S1x4AnyTrue, node);
3122 }
3123
3124 void InstructionSelector::VisitS1x4AllTrue(Node* node) {
3125 VisitRR(this, kMips64S1x4AllTrue, node);
3126 }
3127
3128 void InstructionSelector::VisitS1x8And(Node* node) {
3129 VisitRRR(this, kMips64S128And, node);
3130 }
3131
3132 void InstructionSelector::VisitS1x8Or(Node* node) {
3133 VisitRRR(this, kMips64S128Or, node);
3134 }
3135
3136 void InstructionSelector::VisitS1x8Xor(Node* node) {
3137 VisitRRR(this, kMips64S128Xor, node);
3138 }
3139
3140 void InstructionSelector::VisitS1x8Not(Node* node) {
3141 VisitRR(this, kMips64S128Not, node);
3142 }
3143
3144 void InstructionSelector::VisitS1x8AnyTrue(Node* node) {
3145 VisitRR(this, kMips64S1x8AnyTrue, node);
3146 }
3147
3148 void InstructionSelector::VisitS1x8AllTrue(Node* node) {
3149 VisitRR(this, kMips64S1x8AllTrue, node);
3150 }
3151
3152 void InstructionSelector::VisitS1x16And(Node* node) {
3153 VisitRRR(this, kMips64S128And, node);
3154 }
3155
3156 void InstructionSelector::VisitS1x16Or(Node* node) {
3157 VisitRRR(this, kMips64S128Or, node);
3158 }
3159
3160 void InstructionSelector::VisitS1x16Xor(Node* node) {
3161 VisitRRR(this, kMips64S128Xor, node);
3162 }
3163
3164 void InstructionSelector::VisitS1x16Not(Node* node) {
3165 VisitRR(this, kMips64S128Not, node);
3166 }
3167
3168 void InstructionSelector::VisitS1x16AnyTrue(Node* node) {
3169 VisitRR(this, kMips64S1x16AnyTrue, node);
3170 }
3171
3172 void InstructionSelector::VisitS1x16AllTrue(Node* node) {
3173 VisitRR(this, kMips64S1x16AllTrue, node);
3174 }
3175
3096 // static 3176 // static
3097 MachineOperatorBuilder::Flags 3177 MachineOperatorBuilder::Flags
3098 InstructionSelector::SupportedMachineOperatorFlags() { 3178 InstructionSelector::SupportedMachineOperatorFlags() {
3099 MachineOperatorBuilder::Flags flags = MachineOperatorBuilder::kNoFlags; 3179 MachineOperatorBuilder::Flags flags = MachineOperatorBuilder::kNoFlags;
3100 return flags | MachineOperatorBuilder::kWord32Ctz | 3180 return flags | MachineOperatorBuilder::kWord32Ctz |
3101 MachineOperatorBuilder::kWord64Ctz | 3181 MachineOperatorBuilder::kWord64Ctz |
3102 MachineOperatorBuilder::kWord32Popcnt | 3182 MachineOperatorBuilder::kWord32Popcnt |
3103 MachineOperatorBuilder::kWord64Popcnt | 3183 MachineOperatorBuilder::kWord64Popcnt |
3104 MachineOperatorBuilder::kWord32ShiftIsSafe | 3184 MachineOperatorBuilder::kWord32ShiftIsSafe |
3105 MachineOperatorBuilder::kInt32DivIsSafe | 3185 MachineOperatorBuilder::kInt32DivIsSafe |
(...skipping 19 matching lines...) Expand all
3125 } else { 3205 } else {
3126 DCHECK(kArchVariant == kMips64r2); 3206 DCHECK(kArchVariant == kMips64r2);
3127 return MachineOperatorBuilder::AlignmentRequirements:: 3207 return MachineOperatorBuilder::AlignmentRequirements::
3128 NoUnalignedAccessSupport(); 3208 NoUnalignedAccessSupport();
3129 } 3209 }
3130 } 3210 }
3131 3211
3132 } // namespace compiler 3212 } // namespace compiler
3133 } // namespace internal 3213 } // namespace internal
3134 } // namespace v8 3214 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/mips64/instruction-codes-mips64.h ('k') | src/mips/assembler-mips.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698