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

Side by Side Diff: src/compiler/machine-operator.cc

Issue 1895643002: Revert of [Atomics] Remove Atomics code stubs; use TF ops (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 8 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/machine-operator.h ('k') | src/compiler/mips/code-generator-mips.cc » ('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/compiler/machine-operator.h" 5 #include "src/compiler/machine-operator.h"
6 6
7 #include "src/base/lazy-instance.h" 7 #include "src/base/lazy-instance.h"
8 #include "src/compiler/opcodes.h" 8 #include "src/compiler/opcodes.h"
9 #include "src/compiler/operator.h" 9 #include "src/compiler/operator.h"
10 10
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 } 62 }
63 63
64 64
65 std::ostream& operator<<(std::ostream& os, StoreRepresentation rep) { 65 std::ostream& operator<<(std::ostream& os, StoreRepresentation rep) {
66 return os << "(" << rep.representation() << " : " << rep.write_barrier_kind() 66 return os << "(" << rep.representation() << " : " << rep.write_barrier_kind()
67 << ")"; 67 << ")";
68 } 68 }
69 69
70 70
71 LoadRepresentation LoadRepresentationOf(Operator const* op) { 71 LoadRepresentation LoadRepresentationOf(Operator const* op) {
72 DCHECK(IrOpcode::kLoad == op->opcode() || 72 DCHECK_EQ(IrOpcode::kLoad, op->opcode());
73 IrOpcode::kAtomicLoad == op->opcode());
74 return OpParameter<LoadRepresentation>(op); 73 return OpParameter<LoadRepresentation>(op);
75 } 74 }
76 75
77 76
78 StoreRepresentation const& StoreRepresentationOf(Operator const* op) { 77 StoreRepresentation const& StoreRepresentationOf(Operator const* op) {
79 DCHECK_EQ(IrOpcode::kStore, op->opcode()); 78 DCHECK_EQ(IrOpcode::kStore, op->opcode());
80 return OpParameter<StoreRepresentation>(op); 79 return OpParameter<StoreRepresentation>(op);
81 } 80 }
82 81
83 82
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 #define MACHINE_REPRESENTATION_LIST(V) \ 243 #define MACHINE_REPRESENTATION_LIST(V) \
245 V(kFloat32) \ 244 V(kFloat32) \
246 V(kFloat64) \ 245 V(kFloat64) \
247 V(kSimd128) \ 246 V(kSimd128) \
248 V(kWord8) \ 247 V(kWord8) \
249 V(kWord16) \ 248 V(kWord16) \
250 V(kWord32) \ 249 V(kWord32) \
251 V(kWord64) \ 250 V(kWord64) \
252 V(kTagged) 251 V(kTagged)
253 252
254 #define ATOMIC_TYPE_LIST(V) \
255 V(Int8) \
256 V(Uint8) \
257 V(Int16) \
258 V(Uint16) \
259 V(Int32) \
260 V(Uint32)
261
262 struct MachineOperatorGlobalCache { 253 struct MachineOperatorGlobalCache {
263 #define PURE(Name, properties, value_input_count, control_input_count, \ 254 #define PURE(Name, properties, value_input_count, control_input_count, \
264 output_count) \ 255 output_count) \
265 struct Name##Operator final : public Operator { \ 256 struct Name##Operator final : public Operator { \
266 Name##Operator() \ 257 Name##Operator() \
267 : Operator(IrOpcode::k##Name, Operator::kPure | properties, #Name, \ 258 : Operator(IrOpcode::k##Name, Operator::kPure | properties, #Name, \
268 value_input_count, 0, control_input_count, output_count, 0, \ 259 value_input_count, 0, control_input_count, output_count, 0, \
269 0) {} \ 260 0) {} \
270 }; \ 261 }; \
271 Name##Operator k##Name; 262 Name##Operator k##Name;
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 } \ 346 } \
356 }; \ 347 }; \
357 Store##Type##NoWriteBarrier##Operator kStore##Type##NoWriteBarrier; \ 348 Store##Type##NoWriteBarrier##Operator kStore##Type##NoWriteBarrier; \
358 Store##Type##MapWriteBarrier##Operator kStore##Type##MapWriteBarrier; \ 349 Store##Type##MapWriteBarrier##Operator kStore##Type##MapWriteBarrier; \
359 Store##Type##PointerWriteBarrier##Operator \ 350 Store##Type##PointerWriteBarrier##Operator \
360 kStore##Type##PointerWriteBarrier; \ 351 kStore##Type##PointerWriteBarrier; \
361 Store##Type##FullWriteBarrier##Operator kStore##Type##FullWriteBarrier; \ 352 Store##Type##FullWriteBarrier##Operator kStore##Type##FullWriteBarrier; \
362 CheckedStore##Type##Operator kCheckedStore##Type; 353 CheckedStore##Type##Operator kCheckedStore##Type;
363 MACHINE_REPRESENTATION_LIST(STORE) 354 MACHINE_REPRESENTATION_LIST(STORE)
364 #undef STORE 355 #undef STORE
365
366 #define ATOMIC(Type) \
367 struct AtomicLoad##Type##Operator final \
368 : public Operator1<LoadRepresentation> { \
369 AtomicLoad##Type##Operator() \
370 : Operator1<LoadRepresentation>( \
371 IrOpcode::kAtomicLoad, Operator::kNoThrow | Operator::kNoWrite, \
372 "AtomicLoad", 2, 1, 1, 1, 1, 0, MachineType::Type()) {} \
373 }; \
374 AtomicLoad##Type##Operator kAtomicLoad##Type;
375 ATOMIC_TYPE_LIST(ATOMIC)
376 #undef ATOMIC
377 }; 356 };
378 357
379 358
380 static base::LazyInstance<MachineOperatorGlobalCache>::type kCache = 359 static base::LazyInstance<MachineOperatorGlobalCache>::type kCache =
381 LAZY_INSTANCE_INITIALIZER; 360 LAZY_INSTANCE_INITIALIZER;
382 361
383 362
384 MachineOperatorBuilder::MachineOperatorBuilder(Zone* zone, 363 MachineOperatorBuilder::MachineOperatorBuilder(Zone* zone,
385 MachineRepresentation word, 364 MachineRepresentation word,
386 Flags flags) 365 Flags flags)
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
501 const Operator* MachineOperatorBuilder::Word64PopcntPlaceholder() { 480 const Operator* MachineOperatorBuilder::Word64PopcntPlaceholder() {
502 return &cache_.kWord64Popcnt; 481 return &cache_.kWord64Popcnt;
503 } 482 }
504 483
505 // On 32 bit platforms we need to get a reference to optional operators of 484 // On 32 bit platforms we need to get a reference to optional operators of
506 // 64-bit instructions for later Int64Lowering, even though 32 bit platforms 485 // 64-bit instructions for later Int64Lowering, even though 32 bit platforms
507 // don't support the original 64-bit instruction. 486 // don't support the original 64-bit instruction.
508 const Operator* MachineOperatorBuilder::Word64CtzPlaceholder() { 487 const Operator* MachineOperatorBuilder::Word64CtzPlaceholder() {
509 return &cache_.kWord64Ctz; 488 return &cache_.kWord64Ctz;
510 } 489 }
511
512 const Operator* MachineOperatorBuilder::AtomicLoad(LoadRepresentation rep) {
513 #define LOAD(Type) \
514 if (rep == MachineType::Type()) { \
515 return &cache_.kAtomicLoad##Type; \
516 }
517 ATOMIC_TYPE_LIST(LOAD)
518 #undef LOAD
519 UNREACHABLE();
520 return nullptr;
521 }
522
523 } // namespace compiler 490 } // namespace compiler
524 } // namespace internal 491 } // namespace internal
525 } // namespace v8 492 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/machine-operator.h ('k') | src/compiler/mips/code-generator-mips.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698