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

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

Issue 1533613002: PPC: [turbofan] Change TruncateFloat32ToUint64 to TryTruncateFloat32ToUint64. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@patch08
Patch Set: Created 5 years 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/ppc/code-generator-ppc.cc ('k') | no next file » | 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/compiler/instruction-selector-impl.h" 6 #include "src/compiler/instruction-selector-impl.h"
7 #include "src/compiler/node-matchers.h" 7 #include "src/compiler/node-matchers.h"
8 #include "src/compiler/node-properties.h" 8 #include "src/compiler/node-properties.h"
9 #include "src/ppc/frames-ppc.h" 9 #include "src/ppc/frames-ppc.h"
10 10
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 88
89 void VisitRRO(InstructionSelector* selector, ArchOpcode opcode, Node* node, 89 void VisitRRO(InstructionSelector* selector, ArchOpcode opcode, Node* node,
90 ImmediateMode operand_mode) { 90 ImmediateMode operand_mode) {
91 PPCOperandGenerator g(selector); 91 PPCOperandGenerator g(selector);
92 selector->Emit(opcode, g.DefineAsRegister(node), 92 selector->Emit(opcode, g.DefineAsRegister(node),
93 g.UseRegister(node->InputAt(0)), 93 g.UseRegister(node->InputAt(0)),
94 g.UseOperand(node->InputAt(1), operand_mode)); 94 g.UseOperand(node->InputAt(1), operand_mode));
95 } 95 }
96 96
97 97
98 #if V8_TARGET_ARCH_PPC64
99 void VisitTryTruncateDouble(InstructionSelector* selector, ArchOpcode opcode,
100 Node* node) {
101 PPCOperandGenerator g(selector);
102 InstructionOperand inputs[] = {g.UseRegister(node->InputAt(0))};
103 InstructionOperand outputs[2];
104 size_t output_count = 0;
105 outputs[output_count++] = g.DefineAsRegister(node);
106
107 Node* success_output = NodeProperties::FindProjection(node, 1);
108 if (success_output) {
109 outputs[output_count++] = g.DefineAsRegister(success_output);
110 }
111
112 selector->Emit(opcode, output_count, outputs, 1, inputs);
113 }
114 #endif
115
116
98 // Shared routine for multiple binary operations. 117 // Shared routine for multiple binary operations.
99 template <typename Matcher> 118 template <typename Matcher>
100 void VisitBinop(InstructionSelector* selector, Node* node, 119 void VisitBinop(InstructionSelector* selector, Node* node,
101 InstructionCode opcode, ImmediateMode operand_mode, 120 InstructionCode opcode, ImmediateMode operand_mode,
102 FlagsContinuation* cont) { 121 FlagsContinuation* cont) {
103 PPCOperandGenerator g(selector); 122 PPCOperandGenerator g(selector);
104 Matcher m(node); 123 Matcher m(node);
105 InstructionOperand inputs[4]; 124 InstructionOperand inputs[4];
106 size_t input_count = 0; 125 size_t input_count = 0;
107 InstructionOperand outputs[2]; 126 InstructionOperand outputs[2];
(...skipping 813 matching lines...) Expand 10 before | Expand all | Expand 10 after
921 } 940 }
922 941
923 942
924 void InstructionSelector::VisitChangeFloat64ToUint32(Node* node) { 943 void InstructionSelector::VisitChangeFloat64ToUint32(Node* node) {
925 VisitRR(this, kPPC_DoubleToUint32, node); 944 VisitRR(this, kPPC_DoubleToUint32, node);
926 } 945 }
927 946
928 947
929 #if V8_TARGET_ARCH_PPC64 948 #if V8_TARGET_ARCH_PPC64
930 void InstructionSelector::VisitTryTruncateFloat32ToInt64(Node* node) { 949 void InstructionSelector::VisitTryTruncateFloat32ToInt64(Node* node) {
931 PPCOperandGenerator g(this); 950 VisitTryTruncateDouble(this, kPPC_DoubleToInt64, node);
932
933 InstructionOperand inputs[] = {g.UseRegister(node->InputAt(0))};
934 InstructionOperand outputs[2];
935 size_t output_count = 0;
936 outputs[output_count++] = g.DefineAsRegister(node);
937
938 Node* success_output = NodeProperties::FindProjection(node, 1);
939 if (success_output) {
940 outputs[output_count++] = g.DefineAsRegister(success_output);
941 }
942
943 Emit(kPPC_DoubleToInt64, output_count, outputs, 1, inputs);
944 } 951 }
945 952
946 953
947 void InstructionSelector::VisitTryTruncateFloat64ToInt64(Node* node) { 954 void InstructionSelector::VisitTryTruncateFloat64ToInt64(Node* node) {
948 PPCOperandGenerator g(this); 955 VisitTryTruncateDouble(this, kPPC_DoubleToInt64, node);
949
950 InstructionOperand inputs[] = {g.UseRegister(node->InputAt(0))};
951 InstructionOperand outputs[2];
952 size_t output_count = 0;
953 outputs[output_count++] = g.DefineAsRegister(node);
954
955 Node* success_output = NodeProperties::FindProjection(node, 1);
956 if (success_output) {
957 outputs[output_count++] = g.DefineAsRegister(success_output);
958 }
959
960 Emit(kPPC_DoubleToInt64, output_count, outputs, 1, inputs);
961 } 956 }
962 957
963 958
964 void InstructionSelector::VisitTryTruncateFloat32ToUint64(Node* node) { 959 void InstructionSelector::VisitTryTruncateFloat32ToUint64(Node* node) {
965 if (NodeProperties::FindProjection(node, 1)) { 960 VisitTryTruncateDouble(this, kPPC_DoubleToUint64, node);
966 // TODO(ppc): implement the second return value.
967 UNIMPLEMENTED();
968 }
969 VisitRR(this, kPPC_DoubleToUint64, node);
970 } 961 }
971 962
972 963
973 void InstructionSelector::VisitTryTruncateFloat64ToUint64(Node* node) { 964 void InstructionSelector::VisitTryTruncateFloat64ToUint64(Node* node) {
974 PPCOperandGenerator g(this); 965 VisitTryTruncateDouble(this, kPPC_DoubleToUint64, node);
975
976 InstructionOperand inputs[] = {g.UseRegister(node->InputAt(0))};
977 InstructionOperand outputs[2];
978 size_t output_count = 0;
979 outputs[output_count++] = g.DefineAsRegister(node);
980
981 Node* success_output = NodeProperties::FindProjection(node, 1);
982 if (success_output) {
983 outputs[output_count++] = g.DefineAsRegister(success_output);
984 }
985
986 Emit(kPPC_DoubleToUint64, output_count, outputs, 1, inputs);
987 } 966 }
988 967
989 968
990 void InstructionSelector::VisitChangeInt32ToInt64(Node* node) { 969 void InstructionSelector::VisitChangeInt32ToInt64(Node* node) {
991 // TODO(mbrandy): inspect input to see if nop is appropriate. 970 // TODO(mbrandy): inspect input to see if nop is appropriate.
992 VisitRR(this, kPPC_ExtendSignWord32, node); 971 VisitRR(this, kPPC_ExtendSignWord32, node);
993 } 972 }
994 973
995 974
996 void InstructionSelector::VisitChangeUint32ToUint64(Node* node) { 975 void InstructionSelector::VisitChangeUint32ToUint64(Node* node) {
(...skipping 738 matching lines...) Expand 10 before | Expand all | Expand 10 after
1735 MachineOperatorBuilder::kFloat64RoundTruncate | 1714 MachineOperatorBuilder::kFloat64RoundTruncate |
1736 MachineOperatorBuilder::kFloat64RoundTiesAway | 1715 MachineOperatorBuilder::kFloat64RoundTiesAway |
1737 MachineOperatorBuilder::kWord32Popcnt | 1716 MachineOperatorBuilder::kWord32Popcnt |
1738 MachineOperatorBuilder::kWord64Popcnt; 1717 MachineOperatorBuilder::kWord64Popcnt;
1739 // We omit kWord32ShiftIsSafe as s[rl]w use 0x3f as a mask rather than 0x1f. 1718 // We omit kWord32ShiftIsSafe as s[rl]w use 0x3f as a mask rather than 0x1f.
1740 } 1719 }
1741 1720
1742 } // namespace compiler 1721 } // namespace compiler
1743 } // namespace internal 1722 } // namespace internal
1744 } // namespace v8 1723 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/ppc/code-generator-ppc.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698