| Index: src/compiler/machine-operator.cc
|
| diff --git a/src/compiler/machine-operator.cc b/src/compiler/machine-operator.cc
|
| index d6e10e5892ef21bb00fa393c776d659d5b9f0005..63675415dba9eb7eb0db05e65586af1f45f0dd23 100644
|
| --- a/src/compiler/machine-operator.cc
|
| +++ b/src/compiler/machine-operator.cc
|
| @@ -34,6 +34,10 @@ std::ostream& operator<<(std::ostream& os, WriteBarrierKind kind) {
|
| switch (kind) {
|
| case kNoWriteBarrier:
|
| return os << "NoWriteBarrier";
|
| + case kMapWriteBarrier:
|
| + return os << "MapWriteBarrier";
|
| + case kPointerWriteBarrier:
|
| + return os << "PointerWriteBarrier";
|
| case kFullWriteBarrier:
|
| return os << "FullWriteBarrier";
|
| }
|
| @@ -254,6 +258,16 @@ struct MachineOperatorGlobalCache {
|
| Store##Type##NoWriteBarrier##Operator() \
|
| : Store##Type##Operator(kNoWriteBarrier) {} \
|
| }; \
|
| + struct Store##Type##MapWriteBarrier##Operator final \
|
| + : public Store##Type##Operator { \
|
| + Store##Type##MapWriteBarrier##Operator() \
|
| + : Store##Type##Operator(kMapWriteBarrier) {} \
|
| + }; \
|
| + struct Store##Type##PointerWriteBarrier##Operator final \
|
| + : public Store##Type##Operator { \
|
| + Store##Type##PointerWriteBarrier##Operator() \
|
| + : Store##Type##Operator(kPointerWriteBarrier) {} \
|
| + }; \
|
| struct Store##Type##FullWriteBarrier##Operator final \
|
| : public Store##Type##Operator { \
|
| Store##Type##FullWriteBarrier##Operator() \
|
| @@ -267,6 +281,9 @@ struct MachineOperatorGlobalCache {
|
| "CheckedStore", 4, 1, 1, 0, 1, 0, k##Type) {} \
|
| }; \
|
| Store##Type##NoWriteBarrier##Operator kStore##Type##NoWriteBarrier; \
|
| + Store##Type##MapWriteBarrier##Operator kStore##Type##MapWriteBarrier; \
|
| + Store##Type##PointerWriteBarrier##Operator \
|
| + kStore##Type##PointerWriteBarrier; \
|
| Store##Type##FullWriteBarrier##Operator kStore##Type##FullWriteBarrier; \
|
| CheckedStore##Type##Operator kCheckedStore##Type;
|
| MACHINE_TYPE_LIST(STORE)
|
| @@ -330,14 +347,18 @@ const Operator* MachineOperatorBuilder::Load(LoadRepresentation rep) {
|
|
|
| const Operator* MachineOperatorBuilder::Store(StoreRepresentation rep) {
|
| switch (rep.machine_type()) {
|
| -#define STORE(Type) \
|
| - case k##Type: \
|
| - switch (rep.write_barrier_kind()) { \
|
| - case kNoWriteBarrier: \
|
| - return &cache_.k##Store##Type##NoWriteBarrier; \
|
| - case kFullWriteBarrier: \
|
| - return &cache_.k##Store##Type##FullWriteBarrier; \
|
| - } \
|
| +#define STORE(Type) \
|
| + case k##Type: \
|
| + switch (rep.write_barrier_kind()) { \
|
| + case kNoWriteBarrier: \
|
| + return &cache_.k##Store##Type##NoWriteBarrier; \
|
| + case kMapWriteBarrier: \
|
| + return &cache_.k##Store##Type##MapWriteBarrier; \
|
| + case kPointerWriteBarrier: \
|
| + return &cache_.k##Store##Type##PointerWriteBarrier; \
|
| + case kFullWriteBarrier: \
|
| + return &cache_.k##Store##Type##FullWriteBarrier; \
|
| + } \
|
| break;
|
| MACHINE_TYPE_LIST(STORE)
|
| #undef STORE
|
|
|