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

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

Issue 2170343002: [turbofan] Change Float64Max/Float64Min to JavaScript semantics. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: mips/mips64 ports. Created 4 years, 5 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/compiler/opcodes.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 1202 matching lines...) Expand 10 before | Expand all | Expand 10 after
1213 1213
1214 1214
1215 void InstructionSelector::VisitFloat64Mod(Node* node) { 1215 void InstructionSelector::VisitFloat64Mod(Node* node) {
1216 Mips64OperandGenerator g(this); 1216 Mips64OperandGenerator g(this);
1217 Emit(kMips64ModD, g.DefineAsFixed(node, f0), 1217 Emit(kMips64ModD, g.DefineAsFixed(node, f0),
1218 g.UseFixed(node->InputAt(0), f12), 1218 g.UseFixed(node->InputAt(0), f12),
1219 g.UseFixed(node->InputAt(1), f14))->MarkAsCall(); 1219 g.UseFixed(node->InputAt(1), f14))->MarkAsCall();
1220 } 1220 }
1221 1221
1222 1222
1223 void InstructionSelector::VisitFloat32Max(Node* node) {
1224 Mips64OperandGenerator g(this);
1225 if (kArchVariant == kMips64r6) {
1226 Emit(kMips64Float32Max, g.DefineAsRegister(node),
1227 g.UseUniqueRegister(node->InputAt(0)),
1228 g.UseUniqueRegister(node->InputAt(1)));
1229
1230 } else {
1231 // Reverse operands, and use same reg. for result and right operand.
1232 Emit(kMips64Float32Max, g.DefineSameAsFirst(node),
1233 g.UseRegister(node->InputAt(1)), g.UseRegister(node->InputAt(0)));
1234 }
1235 }
1236
1237
1238 void InstructionSelector::VisitFloat64Max(Node* node) { 1223 void InstructionSelector::VisitFloat64Max(Node* node) {
1239 Mips64OperandGenerator g(this); 1224 Mips64OperandGenerator g(this);
1240 if (kArchVariant == kMips64r6) { 1225 Emit(kMips64Float64Max, g.DefineAsRegister(node),
1241 Emit(kMips64Float64Max, g.DefineAsRegister(node), 1226 g.UseRegister(node->InputAt(0)), g.UseRegister(node->InputAt(1)));
1242 g.UseUniqueRegister(node->InputAt(0)),
1243 g.UseUniqueRegister(node->InputAt(1)));
1244
1245 } else {
1246 // Reverse operands, and use same reg. for result and right operand.
1247 Emit(kMips64Float64Max, g.DefineSameAsFirst(node),
1248 g.UseRegister(node->InputAt(1)), g.UseRegister(node->InputAt(0)));
1249 }
1250 }
1251
1252
1253 void InstructionSelector::VisitFloat32Min(Node* node) {
1254 Mips64OperandGenerator g(this);
1255 if (kArchVariant == kMips64r6) {
1256 Emit(kMips64Float32Min, g.DefineAsRegister(node),
1257 g.UseUniqueRegister(node->InputAt(0)),
1258 g.UseUniqueRegister(node->InputAt(1)));
1259
1260 } else {
1261 // Reverse operands, and use same reg. for result and right operand.
1262 Emit(kMips64Float32Min, g.DefineSameAsFirst(node),
1263 g.UseRegister(node->InputAt(1)), g.UseRegister(node->InputAt(0)));
1264 }
1265 } 1227 }
1266 1228
1267 1229
1268 void InstructionSelector::VisitFloat64Min(Node* node) { 1230 void InstructionSelector::VisitFloat64Min(Node* node) {
1269 Mips64OperandGenerator g(this); 1231 Mips64OperandGenerator g(this);
1270 if (kArchVariant == kMips64r6) { 1232 Emit(kMips64Float64Min, g.DefineAsRegister(node),
1271 Emit(kMips64Float64Min, g.DefineAsRegister(node), 1233 g.UseRegister(node->InputAt(0)), g.UseRegister(node->InputAt(1)));
1272 g.UseUniqueRegister(node->InputAt(0)),
1273 g.UseUniqueRegister(node->InputAt(1)));
1274
1275 } else {
1276 // Reverse operands, and use same reg. for result and right operand.
1277 Emit(kMips64Float64Min, g.DefineSameAsFirst(node),
1278 g.UseRegister(node->InputAt(1)), g.UseRegister(node->InputAt(0)));
1279 }
1280 } 1234 }
1281 1235
1282 1236
1283 void InstructionSelector::VisitFloat32Abs(Node* node) { 1237 void InstructionSelector::VisitFloat32Abs(Node* node) {
1284 VisitRR(this, kMips64AbsS, node); 1238 VisitRR(this, kMips64AbsS, node);
1285 } 1239 }
1286 1240
1287 1241
1288 void InstructionSelector::VisitFloat64Abs(Node* node) { 1242 void InstructionSelector::VisitFloat64Abs(Node* node) {
1289 VisitRR(this, kMips64AbsD, node); 1243 VisitRR(this, kMips64AbsD, node);
(...skipping 785 matching lines...) Expand 10 before | Expand all | Expand 10 after
2075 // static 2029 // static
2076 MachineOperatorBuilder::Flags 2030 MachineOperatorBuilder::Flags
2077 InstructionSelector::SupportedMachineOperatorFlags() { 2031 InstructionSelector::SupportedMachineOperatorFlags() {
2078 return MachineOperatorBuilder::kWord32Ctz | 2032 return MachineOperatorBuilder::kWord32Ctz |
2079 MachineOperatorBuilder::kWord64Ctz | 2033 MachineOperatorBuilder::kWord64Ctz |
2080 MachineOperatorBuilder::kWord32Popcnt | 2034 MachineOperatorBuilder::kWord32Popcnt |
2081 MachineOperatorBuilder::kWord64Popcnt | 2035 MachineOperatorBuilder::kWord64Popcnt |
2082 MachineOperatorBuilder::kWord32ShiftIsSafe | 2036 MachineOperatorBuilder::kWord32ShiftIsSafe |
2083 MachineOperatorBuilder::kInt32DivIsSafe | 2037 MachineOperatorBuilder::kInt32DivIsSafe |
2084 MachineOperatorBuilder::kUint32DivIsSafe | 2038 MachineOperatorBuilder::kUint32DivIsSafe |
2085 MachineOperatorBuilder::kFloat64Min |
2086 MachineOperatorBuilder::kFloat64Max |
2087 MachineOperatorBuilder::kFloat32Min |
2088 MachineOperatorBuilder::kFloat32Max |
2089 MachineOperatorBuilder::kFloat64RoundDown | 2039 MachineOperatorBuilder::kFloat64RoundDown |
2090 MachineOperatorBuilder::kFloat32RoundDown | 2040 MachineOperatorBuilder::kFloat32RoundDown |
2091 MachineOperatorBuilder::kFloat64RoundUp | 2041 MachineOperatorBuilder::kFloat64RoundUp |
2092 MachineOperatorBuilder::kFloat32RoundUp | 2042 MachineOperatorBuilder::kFloat32RoundUp |
2093 MachineOperatorBuilder::kFloat64RoundTruncate | 2043 MachineOperatorBuilder::kFloat64RoundTruncate |
2094 MachineOperatorBuilder::kFloat32RoundTruncate | 2044 MachineOperatorBuilder::kFloat32RoundTruncate |
2095 MachineOperatorBuilder::kFloat64RoundTiesEven | 2045 MachineOperatorBuilder::kFloat64RoundTiesEven |
2096 MachineOperatorBuilder::kFloat32RoundTiesEven; 2046 MachineOperatorBuilder::kFloat32RoundTiesEven;
2097 } 2047 }
2098 2048
2099 // static 2049 // static
2100 MachineOperatorBuilder::AlignmentRequirements 2050 MachineOperatorBuilder::AlignmentRequirements
2101 InstructionSelector::AlignmentRequirements() { 2051 InstructionSelector::AlignmentRequirements() {
2102 if (kArchVariant == kMips64r6) { 2052 if (kArchVariant == kMips64r6) {
2103 return MachineOperatorBuilder::AlignmentRequirements:: 2053 return MachineOperatorBuilder::AlignmentRequirements::
2104 FullUnalignedAccessSupport(); 2054 FullUnalignedAccessSupport();
2105 } else { 2055 } else {
2106 DCHECK(kArchVariant == kMips64r2); 2056 DCHECK(kArchVariant == kMips64r2);
2107 return MachineOperatorBuilder::AlignmentRequirements:: 2057 return MachineOperatorBuilder::AlignmentRequirements::
2108 NoUnalignedAccessSupport(); 2058 NoUnalignedAccessSupport();
2109 } 2059 }
2110 } 2060 }
2111 2061
2112 } // namespace compiler 2062 } // namespace compiler
2113 } // namespace internal 2063 } // namespace internal
2114 } // namespace v8 2064 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/mips64/instruction-codes-mips64.h ('k') | src/compiler/opcodes.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698