OLD | NEW |
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 418 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
429 // Either the output is uint32 or the uses only care about the | 429 // Either the output is uint32 or the uses only care about the |
430 // low 32 bits (so we can pick uint32 safely). | 430 // low 32 bits (so we can pick uint32 safely). |
431 op = simplified()->ChangeUint32ToTagged(); | 431 op = simplified()->ChangeUint32ToTagged(); |
432 } else { | 432 } else { |
433 return TypeError(node, output_rep, output_type, | 433 return TypeError(node, output_rep, output_type, |
434 MachineRepresentation::kTagged); | 434 MachineRepresentation::kTagged); |
435 } | 435 } |
436 } else if (output_rep == | 436 } else if (output_rep == |
437 MachineRepresentation::kFloat32) { // float32 -> float64 -> tagged | 437 MachineRepresentation::kFloat32) { // float32 -> float64 -> tagged |
438 node = InsertChangeFloat32ToFloat64(node); | 438 node = InsertChangeFloat32ToFloat64(node); |
439 op = simplified()->ChangeFloat64ToTagged(); | 439 op = simplified()->ChangeFloat64ToTagged( |
| 440 output_type->Maybe(Type::MinusZero()) |
| 441 ? CheckForMinusZeroMode::kCheckForMinusZero |
| 442 : CheckForMinusZeroMode::kDontCheckForMinusZero); |
440 } else if (output_rep == MachineRepresentation::kFloat64) { | 443 } else if (output_rep == MachineRepresentation::kFloat64) { |
441 if (output_type->Is(Type::Signed31())) { // float64 -> int32 -> tagged | 444 if (output_type->Is(Type::Signed31())) { // float64 -> int32 -> tagged |
442 node = InsertChangeFloat64ToInt32(node); | 445 node = InsertChangeFloat64ToInt32(node); |
443 op = simplified()->ChangeInt31ToTaggedSigned(); | 446 op = simplified()->ChangeInt31ToTaggedSigned(); |
444 } else if (output_type->Is( | 447 } else if (output_type->Is( |
445 Type::Signed32())) { // float64 -> int32 -> tagged | 448 Type::Signed32())) { // float64 -> int32 -> tagged |
446 node = InsertChangeFloat64ToInt32(node); | 449 node = InsertChangeFloat64ToInt32(node); |
447 op = simplified()->ChangeInt32ToTagged(); | 450 op = simplified()->ChangeInt32ToTagged(); |
448 } else if (output_type->Is( | 451 } else if (output_type->Is( |
449 Type::Unsigned32())) { // float64 -> uint32 -> tagged | 452 Type::Unsigned32())) { // float64 -> uint32 -> tagged |
450 node = InsertChangeFloat64ToUint32(node); | 453 node = InsertChangeFloat64ToUint32(node); |
451 op = simplified()->ChangeUint32ToTagged(); | 454 op = simplified()->ChangeUint32ToTagged(); |
452 } else { | 455 } else { |
453 op = simplified()->ChangeFloat64ToTagged(); | 456 op = simplified()->ChangeFloat64ToTagged( |
| 457 output_type->Maybe(Type::MinusZero()) |
| 458 ? CheckForMinusZeroMode::kCheckForMinusZero |
| 459 : CheckForMinusZeroMode::kDontCheckForMinusZero); |
454 } | 460 } |
455 } else { | 461 } else { |
456 return TypeError(node, output_rep, output_type, | 462 return TypeError(node, output_rep, output_type, |
457 MachineRepresentation::kTagged); | 463 MachineRepresentation::kTagged); |
458 } | 464 } |
459 return jsgraph()->graph()->NewNode(op, node); | 465 return jsgraph()->graph()->NewNode(op, node); |
460 } | 466 } |
461 | 467 |
462 | 468 |
463 Node* RepresentationChanger::GetFloat32RepresentationFor( | 469 Node* RepresentationChanger::GetFloat32RepresentationFor( |
(...skipping 627 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1091 node); | 1097 node); |
1092 } | 1098 } |
1093 | 1099 |
1094 Node* RepresentationChanger::InsertChangeUint32ToFloat64(Node* node) { | 1100 Node* RepresentationChanger::InsertChangeUint32ToFloat64(Node* node) { |
1095 return jsgraph()->graph()->NewNode(machine()->ChangeUint32ToFloat64(), node); | 1101 return jsgraph()->graph()->NewNode(machine()->ChangeUint32ToFloat64(), node); |
1096 } | 1102 } |
1097 | 1103 |
1098 } // namespace compiler | 1104 } // namespace compiler |
1099 } // namespace internal | 1105 } // namespace internal |
1100 } // namespace v8 | 1106 } // namespace v8 |
OLD | NEW |