| Index: src/compiler/machine-operator.cc
|
| diff --git a/src/compiler/machine-operator.cc b/src/compiler/machine-operator.cc
|
| index 07bcf3f77f1b208a2c7dc8c655151aede2d0b084..247b01eaf326a55a40370ba698f7a4e8ca48baf6 100644
|
| --- a/src/compiler/machine-operator.cc
|
| +++ b/src/compiler/machine-operator.cc
|
| @@ -200,8 +200,16 @@ struct MachineOperatorGlobalCache {
|
| IrOpcode::kCheckedLoad, Operator::kNoThrow | Operator::kNoWrite, \
|
| "CheckedLoad", 3, 1, 1, 1, 1, 0, k##Type) {} \
|
| }; \
|
| + struct LoadAtomic##Type##Operator final \
|
| + : public Operator1<LoadRepresentation> { \
|
| + LoadAtomic##Type##Operator() \
|
| + : Operator1<LoadRepresentation>( \
|
| + IrOpcode::kLoadAtomic, Operator::kNoThrow | Operator::kNoWrite, \
|
| + "LoadAtomic", 2, 1, 1, 1, 1, 0, k##Type) {} \
|
| + }; \
|
| Load##Type##Operator kLoad##Type; \
|
| - CheckedLoad##Type##Operator kCheckedLoad##Type;
|
| + CheckedLoad##Type##Operator kCheckedLoad##Type; \
|
| + LoadAtomic##Type##Operator kLoadAtomic##Type;
|
| MACHINE_TYPE_LIST(LOAD)
|
| #undef LOAD
|
|
|
| @@ -273,6 +281,23 @@ const Operator* MachineOperatorBuilder::Load(LoadRepresentation rep) {
|
| }
|
|
|
|
|
| +const Operator* MachineOperatorBuilder::LoadAtomic(LoadRepresentation rep) {
|
| + switch (rep) {
|
| +#define LOAD(Type) \
|
| + case k##Type: \
|
| + return &cache_.kLoadAtomic##Type;
|
| + MACHINE_TYPE_LIST(LOAD)
|
| +#undef LOAD
|
| + default:
|
| + break;
|
| + }
|
| + // Uncached.
|
| + return new (zone_) Operator1<LoadRepresentation>( // --
|
| + IrOpcode::kLoad, Operator::kNoThrow | Operator::kNoWrite, "LoadAtomic", 2,
|
| + 1, 1, 1, 1, 0, rep);
|
| +}
|
| +
|
| +
|
| const Operator* MachineOperatorBuilder::Store(StoreRepresentation rep) {
|
| switch (rep.machine_type()) {
|
| #define STORE(Type) \
|
|
|