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

Side by Side Diff: src/compiler/representation-change.cc

Issue 1693563004: Convert between tagged and untagged kSimd128 values. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebase Created 4 years, 9 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/representation-change.h ('k') | src/compiler/simplified-operator.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 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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/compiler/representation-change.h" 5 #include "src/compiler/representation-change.h"
6 6
7 #include <sstream> 7 #include <sstream>
8 8
9 #include "src/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/code-factory.h" 10 #include "src/code-factory.h"
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 } 130 }
131 switch (use_rep) { 131 switch (use_rep) {
132 case MachineRepresentation::kTagged: 132 case MachineRepresentation::kTagged:
133 return GetTaggedRepresentationFor(node, output_rep, output_type); 133 return GetTaggedRepresentationFor(node, output_rep, output_type);
134 case MachineRepresentation::kFloat32: 134 case MachineRepresentation::kFloat32:
135 return GetFloat32RepresentationFor(node, output_rep, output_type, 135 return GetFloat32RepresentationFor(node, output_rep, output_type,
136 truncation); 136 truncation);
137 case MachineRepresentation::kFloat64: 137 case MachineRepresentation::kFloat64:
138 return GetFloat64RepresentationFor(node, output_rep, output_type, 138 return GetFloat64RepresentationFor(node, output_rep, output_type,
139 truncation); 139 truncation);
140 case MachineRepresentation::kSimd128:
141 return GetSimd128RepresentationFor(node, output_rep, output_type);
140 case MachineRepresentation::kBit: 142 case MachineRepresentation::kBit:
141 return GetBitRepresentationFor(node, output_rep, output_type); 143 return GetBitRepresentationFor(node, output_rep, output_type);
142 case MachineRepresentation::kWord8: 144 case MachineRepresentation::kWord8:
143 case MachineRepresentation::kWord16: 145 case MachineRepresentation::kWord16:
144 case MachineRepresentation::kWord32: 146 case MachineRepresentation::kWord32:
145 return GetWord32RepresentationFor(node, output_rep, output_type); 147 return GetWord32RepresentationFor(node, output_rep, output_type);
146 case MachineRepresentation::kWord64: 148 case MachineRepresentation::kWord64:
147 return GetWord64RepresentationFor(node, output_rep, output_type); 149 return GetWord64RepresentationFor(node, output_rep, output_type);
148 case MachineRepresentation::kSimd128: // Fall through.
149 // TODO(bbudge) Handle conversions between tagged and untagged.
150 break;
151 case MachineRepresentation::kNone: 150 case MachineRepresentation::kNone:
152 return node; 151 return node;
153 } 152 }
154 UNREACHABLE(); 153 UNREACHABLE();
155 return nullptr; 154 return nullptr;
156 } 155 }
157 156
158 157
159 Node* RepresentationChanger::GetTaggedRepresentationFor( 158 Node* RepresentationChanger::GetTaggedRepresentationFor(
160 Node* node, MachineRepresentation output_rep, Type* output_type) { 159 Node* node, MachineRepresentation output_rep, Type* output_type) {
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 op = simplified()->ChangeTaggedToFloat64(); 306 op = simplified()->ChangeTaggedToFloat64();
308 } else if (output_rep == MachineRepresentation::kFloat32) { 307 } else if (output_rep == MachineRepresentation::kFloat32) {
309 op = machine()->ChangeFloat32ToFloat64(); 308 op = machine()->ChangeFloat32ToFloat64();
310 } else { 309 } else {
311 return TypeError(node, output_rep, output_type, 310 return TypeError(node, output_rep, output_type,
312 MachineRepresentation::kFloat64); 311 MachineRepresentation::kFloat64);
313 } 312 }
314 return jsgraph()->graph()->NewNode(op, node); 313 return jsgraph()->graph()->NewNode(op, node);
315 } 314 }
316 315
316 Node* RepresentationChanger::GetSimd128RepresentationFor(
317 Node* node, MachineRepresentation output_rep, Type* output_type) {
318 // Select the correct X -> Simd128 operator.
319 const Operator* op;
320 if (output_rep == MachineRepresentation::kTagged) {
321 op = nullptr;
322 } else {
323 return TypeError(node, output_rep, output_type,
324 MachineRepresentation::kFloat64);
325 }
326 return jsgraph()->graph()->NewNode(op, node);
327 }
317 328
318 Node* RepresentationChanger::MakeTruncatedInt32Constant(double value) { 329 Node* RepresentationChanger::MakeTruncatedInt32Constant(double value) {
319 return jsgraph()->Int32Constant(DoubleToInt32(value)); 330 return jsgraph()->Int32Constant(DoubleToInt32(value));
320 } 331 }
321 332
322
323 Node* RepresentationChanger::GetWord32RepresentationFor( 333 Node* RepresentationChanger::GetWord32RepresentationFor(
324 Node* node, MachineRepresentation output_rep, Type* output_type) { 334 Node* node, MachineRepresentation output_rep, Type* output_type) {
325 // Eagerly fold representation changes for constants. 335 // Eagerly fold representation changes for constants.
326 switch (node->opcode()) { 336 switch (node->opcode()) {
327 case IrOpcode::kInt32Constant: 337 case IrOpcode::kInt32Constant:
328 return node; // No change necessary. 338 return node; // No change necessary.
329 case IrOpcode::kFloat32Constant: 339 case IrOpcode::kFloat32Constant:
330 return MakeTruncatedInt32Constant(OpParameter<float>(node)); 340 return MakeTruncatedInt32Constant(OpParameter<float>(node));
331 case IrOpcode::kNumberConstant: 341 case IrOpcode::kNumberConstant:
332 case IrOpcode::kFloat64Constant: 342 case IrOpcode::kFloat64Constant:
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
530 540
531 541
532 Node* RepresentationChanger::InsertChangeTaggedToFloat64(Node* node) { 542 Node* RepresentationChanger::InsertChangeTaggedToFloat64(Node* node) {
533 return jsgraph()->graph()->NewNode(simplified()->ChangeTaggedToFloat64(), 543 return jsgraph()->graph()->NewNode(simplified()->ChangeTaggedToFloat64(),
534 node); 544 node);
535 } 545 }
536 546
537 } // namespace compiler 547 } // namespace compiler
538 } // namespace internal 548 } // namespace internal
539 } // namespace v8 549 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/representation-change.h ('k') | src/compiler/simplified-operator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698