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

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

Issue 1593313010: Revert of [turbofan] Implement rounding of floats on x64 and ia32 without sse4.1. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 11 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/x64/code-generator-x64.cc ('k') | src/ia32/assembler-ia32.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 <algorithm> 5 #include <algorithm>
6 6
7 #include "src/base/adapters.h" 7 #include "src/base/adapters.h"
8 #include "src/compiler/instruction-selector-impl.h" 8 #include "src/compiler/instruction-selector-impl.h"
9 #include "src/compiler/node-matchers.h" 9 #include "src/compiler/node-matchers.h"
10 #include "src/compiler/node-properties.h" 10 #include "src/compiler/node-properties.h"
(...skipping 1208 matching lines...) Expand 10 before | Expand all | Expand 10 after
1219 VisitFloatUnop(this, node, node->InputAt(0), kAVXFloat64Abs, kSSEFloat64Abs); 1219 VisitFloatUnop(this, node, node->InputAt(0), kAVXFloat64Abs, kSSEFloat64Abs);
1220 } 1220 }
1221 1221
1222 1222
1223 void InstructionSelector::VisitFloat64Sqrt(Node* node) { 1223 void InstructionSelector::VisitFloat64Sqrt(Node* node) {
1224 VisitRO(this, node, kSSEFloat64Sqrt); 1224 VisitRO(this, node, kSSEFloat64Sqrt);
1225 } 1225 }
1226 1226
1227 1227
1228 void InstructionSelector::VisitFloat32RoundDown(Node* node) { 1228 void InstructionSelector::VisitFloat32RoundDown(Node* node) {
1229 X64OperandGenerator g(this); 1229 VisitRR(this, node, kSSEFloat32Round | MiscField::encode(kRoundDown));
1230 Emit(kSSEFloat32Round | MiscField::encode(kRoundDown),
1231 g.DefineSameAsFirst(node), g.UseRegister(node->InputAt(0)));
1232 } 1230 }
1233 1231
1234 1232
1235 void InstructionSelector::VisitFloat64RoundDown(Node* node) { 1233 void InstructionSelector::VisitFloat64RoundDown(Node* node) {
1236 X64OperandGenerator g(this); 1234 VisitRR(this, node, kSSEFloat64Round | MiscField::encode(kRoundDown));
1237 Emit(kSSEFloat64Round | MiscField::encode(kRoundDown),
1238 g.DefineSameAsFirst(node), g.UseRegister(node->InputAt(0)));
1239 } 1235 }
1240 1236
1241 1237
1242 void InstructionSelector::VisitFloat32RoundUp(Node* node) { 1238 void InstructionSelector::VisitFloat32RoundUp(Node* node) {
1243 X64OperandGenerator g(this); 1239 VisitRR(this, node, kSSEFloat32Round | MiscField::encode(kRoundUp));
1244 Emit(kSSEFloat32Round | MiscField::encode(kRoundUp),
1245 g.DefineSameAsFirst(node), g.UseRegister(node->InputAt(0)));
1246 } 1240 }
1247 1241
1248 1242
1249 void InstructionSelector::VisitFloat64RoundUp(Node* node) { 1243 void InstructionSelector::VisitFloat64RoundUp(Node* node) {
1250 X64OperandGenerator g(this); 1244 VisitRR(this, node, kSSEFloat64Round | MiscField::encode(kRoundUp));
1251 Emit(kSSEFloat64Round | MiscField::encode(kRoundUp),
1252 g.DefineSameAsFirst(node), g.UseRegister(node->InputAt(0)));
1253 } 1245 }
1254 1246
1255 1247
1256 void InstructionSelector::VisitFloat32RoundTruncate(Node* node) { 1248 void InstructionSelector::VisitFloat32RoundTruncate(Node* node) {
1257 X64OperandGenerator g(this); 1249 VisitRR(this, node, kSSEFloat32Round | MiscField::encode(kRoundToZero));
1258 Emit(kSSEFloat32Round | MiscField::encode(kRoundToZero),
1259 g.DefineSameAsFirst(node), g.UseRegister(node->InputAt(0)));
1260 } 1250 }
1261 1251
1262 1252
1263 void InstructionSelector::VisitFloat64RoundTruncate(Node* node) { 1253 void InstructionSelector::VisitFloat64RoundTruncate(Node* node) {
1264 X64OperandGenerator g(this); 1254 VisitRR(this, node, kSSEFloat64Round | MiscField::encode(kRoundToZero));
1265 Emit(kSSEFloat64Round | MiscField::encode(kRoundToZero),
1266 g.DefineSameAsFirst(node), g.UseRegister(node->InputAt(0)));
1267 } 1255 }
1268 1256
1269 1257
1270 void InstructionSelector::VisitFloat64RoundTiesAway(Node* node) { 1258 void InstructionSelector::VisitFloat64RoundTiesAway(Node* node) {
1271 UNREACHABLE(); 1259 UNREACHABLE();
1272 } 1260 }
1273 1261
1274 1262
1275 void InstructionSelector::VisitFloat32RoundTiesEven(Node* node) { 1263 void InstructionSelector::VisitFloat32RoundTiesEven(Node* node) {
1276 X64OperandGenerator g(this); 1264 VisitRR(this, node, kSSEFloat32Round | MiscField::encode(kRoundToNearest));
1277 Emit(kSSEFloat32Round | MiscField::encode(kRoundToNearest),
1278 g.DefineSameAsFirst(node), g.UseRegister(node->InputAt(0)));
1279 } 1265 }
1280 1266
1281 1267
1282 void InstructionSelector::VisitFloat64RoundTiesEven(Node* node) { 1268 void InstructionSelector::VisitFloat64RoundTiesEven(Node* node) {
1283 X64OperandGenerator g(this); 1269 VisitRR(this, node, kSSEFloat64Round | MiscField::encode(kRoundToNearest));
1284 Emit(kSSEFloat64Round | MiscField::encode(kRoundToNearest),
1285 g.DefineSameAsFirst(node), g.UseRegister(node->InputAt(0)));
1286 } 1270 }
1287 1271
1288 1272
1289 void InstructionSelector::EmitPrepareArguments( 1273 void InstructionSelector::EmitPrepareArguments(
1290 ZoneVector<PushParameter>* arguments, const CallDescriptor* descriptor, 1274 ZoneVector<PushParameter>* arguments, const CallDescriptor* descriptor,
1291 Node* node) { 1275 Node* node) {
1292 X64OperandGenerator g(this); 1276 X64OperandGenerator g(this);
1293 1277
1294 // Prepare for C function call. 1278 // Prepare for C function call.
1295 if (descriptor->IsCFunctionCall()) { 1279 if (descriptor->IsCFunctionCall()) {
(...skipping 512 matching lines...) Expand 10 before | Expand all | Expand 10 after
1808 1792
1809 // static 1793 // static
1810 MachineOperatorBuilder::Flags 1794 MachineOperatorBuilder::Flags
1811 InstructionSelector::SupportedMachineOperatorFlags() { 1795 InstructionSelector::SupportedMachineOperatorFlags() {
1812 MachineOperatorBuilder::Flags flags = 1796 MachineOperatorBuilder::Flags flags =
1813 MachineOperatorBuilder::kFloat32Max | 1797 MachineOperatorBuilder::kFloat32Max |
1814 MachineOperatorBuilder::kFloat32Min | 1798 MachineOperatorBuilder::kFloat32Min |
1815 MachineOperatorBuilder::kFloat64Max | 1799 MachineOperatorBuilder::kFloat64Max |
1816 MachineOperatorBuilder::kFloat64Min | 1800 MachineOperatorBuilder::kFloat64Min |
1817 MachineOperatorBuilder::kWord32ShiftIsSafe | 1801 MachineOperatorBuilder::kWord32ShiftIsSafe |
1818 MachineOperatorBuilder::kWord32Ctz | MachineOperatorBuilder::kWord64Ctz | 1802 MachineOperatorBuilder::kWord32Ctz | MachineOperatorBuilder::kWord64Ctz;
1819 MachineOperatorBuilder::kFloat32RoundDown |
1820 MachineOperatorBuilder::kFloat32RoundUp |
1821 MachineOperatorBuilder::kFloat32RoundTruncate |
1822 MachineOperatorBuilder::kFloat32RoundTiesEven |
1823 MachineOperatorBuilder::kFloat64RoundDown |
1824 MachineOperatorBuilder::kFloat64RoundUp |
1825 MachineOperatorBuilder::kFloat64RoundTruncate |
1826 MachineOperatorBuilder::kFloat64RoundTiesEven;
1827 if (CpuFeatures::IsSupported(POPCNT)) { 1803 if (CpuFeatures::IsSupported(POPCNT)) {
1828 flags |= MachineOperatorBuilder::kWord32Popcnt | 1804 flags |= MachineOperatorBuilder::kWord32Popcnt |
1829 MachineOperatorBuilder::kWord64Popcnt; 1805 MachineOperatorBuilder::kWord64Popcnt;
1830 } 1806 }
1807 if (CpuFeatures::IsSupported(SSE4_1)) {
1808 flags |= MachineOperatorBuilder::kFloat32RoundDown |
1809 MachineOperatorBuilder::kFloat64RoundDown |
1810 MachineOperatorBuilder::kFloat32RoundUp |
1811 MachineOperatorBuilder::kFloat64RoundUp |
1812 MachineOperatorBuilder::kFloat32RoundTruncate |
1813 MachineOperatorBuilder::kFloat64RoundTruncate |
1814 MachineOperatorBuilder::kFloat32RoundTiesEven |
1815 MachineOperatorBuilder::kFloat64RoundTiesEven;
1816 }
1831 return flags; 1817 return flags;
1832 } 1818 }
1833 1819
1834 } // namespace compiler 1820 } // namespace compiler
1835 } // namespace internal 1821 } // namespace internal
1836 } // namespace v8 1822 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/x64/code-generator-x64.cc ('k') | src/ia32/assembler-ia32.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698