| Index: src/compiler/machine-operator.cc
 | 
| diff --git a/src/compiler/machine-operator.cc b/src/compiler/machine-operator.cc
 | 
| index 6a506d26ad334c493ec8c92184eb1bf28b12d0cd..b4628abe085b20015246b57c6c936f5019bb8810 100644
 | 
| --- a/src/compiler/machine-operator.cc
 | 
| +++ b/src/compiler/machine-operator.cc
 | 
| @@ -79,6 +79,16 @@ StoreRepresentation const& StoreRepresentationOf(Operator const* op) {
 | 
|    return OpParameter<StoreRepresentation>(op);
 | 
|  }
 | 
|  
 | 
| +UnalignedLoadRepresentation UnalignedLoadRepresentationOf(Operator const* op) {
 | 
| +  DCHECK_EQ(IrOpcode::kUnalignedLoad, op->opcode());
 | 
| +  return OpParameter<UnalignedLoadRepresentation>(op);
 | 
| +}
 | 
| +
 | 
| +UnalignedStoreRepresentation const& UnalignedStoreRepresentationOf(
 | 
| +    Operator const* op) {
 | 
| +  DCHECK_EQ(IrOpcode::kUnalignedStore, op->opcode());
 | 
| +  return OpParameter<UnalignedStoreRepresentation>(op);
 | 
| +}
 | 
|  
 | 
|  CheckedLoadRepresentation CheckedLoadRepresentationOf(Operator const* op) {
 | 
|    DCHECK_EQ(IrOpcode::kCheckedLoad, op->opcode());
 | 
| @@ -284,6 +294,14 @@ struct MachineOperatorGlobalCache {
 | 
|                IrOpcode::kLoad, Operator::kNoThrow | Operator::kNoWrite,        \
 | 
|                "Load", 2, 1, 1, 1, 1, 0, MachineType::Type()) {}                \
 | 
|    };                                                                           \
 | 
| +  struct UnalignedLoad##Type##Operator final                                   \
 | 
| +      : public Operator1<UnalignedLoadRepresentation> {                        \
 | 
| +    UnalignedLoad##Type##Operator()                                            \
 | 
| +        : Operator1<UnalignedLoadRepresentation>(                              \
 | 
| +              IrOpcode::kUnalignedLoad,                                        \
 | 
| +              Operator::kNoThrow | Operator::kNoWrite, "UnalignedLoad", 2, 1,  \
 | 
| +              1, 1, 1, 0, MachineType::Type()) {}                              \
 | 
| +  };                                                                           \
 | 
|    struct CheckedLoad##Type##Operator final                                     \
 | 
|        : public Operator1<CheckedLoadRepresentation> {                          \
 | 
|      CheckedLoad##Type##Operator()                                              \
 | 
| @@ -292,6 +310,7 @@ struct MachineOperatorGlobalCache {
 | 
|                "CheckedLoad", 3, 1, 1, 1, 1, 0, MachineType::Type()) {}         \
 | 
|    };                                                                           \
 | 
|    Load##Type##Operator kLoad##Type;                                            \
 | 
| +  UnalignedLoad##Type##Operator kUnalignedLoad##Type;                          \
 | 
|    CheckedLoad##Type##Operator kCheckedLoad##Type;
 | 
|    MACHINE_TYPE_LIST(LOAD)
 | 
|  #undef LOAD
 | 
| @@ -337,6 +356,14 @@ struct MachineOperatorGlobalCache {
 | 
|      Store##Type##FullWriteBarrier##Operator()                                  \
 | 
|          : Store##Type##Operator(kFullWriteBarrier) {}                          \
 | 
|    };                                                                           \
 | 
| +  struct UnalignedStore##Type##Operator final                                  \
 | 
| +      : public Operator1<UnalignedStoreRepresentation> {                       \
 | 
| +    UnalignedStore##Type##Operator()                                           \
 | 
| +        : Operator1<UnalignedStoreRepresentation>(                             \
 | 
| +              IrOpcode::kUnalignedStore,                                       \
 | 
| +              Operator::kNoRead | Operator::kNoThrow, "UnalignedStore", 3, 1,  \
 | 
| +              1, 0, 1, 0, MachineRepresentation::Type) {}                      \
 | 
| +  };                                                                           \
 | 
|    struct CheckedStore##Type##Operator final                                    \
 | 
|        : public Operator1<CheckedStoreRepresentation> {                         \
 | 
|      CheckedStore##Type##Operator()                                             \
 | 
| @@ -350,6 +377,7 @@ struct MachineOperatorGlobalCache {
 | 
|    Store##Type##PointerWriteBarrier##Operator                                   \
 | 
|        kStore##Type##PointerWriteBarrier;                                       \
 | 
|    Store##Type##FullWriteBarrier##Operator kStore##Type##FullWriteBarrier;      \
 | 
| +  UnalignedStore##Type##Operator kUnalignedStore##Type;                        \
 | 
|    CheckedStore##Type##Operator kCheckedStore##Type;
 | 
|    MACHINE_REPRESENTATION_LIST(STORE)
 | 
|  #undef STORE
 | 
| @@ -444,6 +472,35 @@ const Operator* MachineOperatorBuilder::Store(StoreRepresentation store_rep) {
 | 
|    return nullptr;
 | 
|  }
 | 
|  
 | 
| +const OptionalOperator MachineOperatorBuilder::UnalignedLoad(
 | 
| +    UnalignedLoadRepresentation rep) {
 | 
| +#define LOAD(Type)                                                         \
 | 
| +  if (rep == MachineType::Type()) {                                        \
 | 
| +    return OptionalOperator(                                               \
 | 
| +        flags_ & kUnalignedLoad ? &cache_.kUnalignedLoad##Type : nullptr); \
 | 
| +  }
 | 
| +  MACHINE_TYPE_LIST(LOAD)
 | 
| +#undef LOAD
 | 
| +  UNREACHABLE();
 | 
| +  return OptionalOperator(nullptr);
 | 
| +}
 | 
| +
 | 
| +const OptionalOperator MachineOperatorBuilder::UnalignedStore(
 | 
| +    UnalignedStoreRepresentation rep) {
 | 
| +  switch (rep) {
 | 
| +#define STORE(kRep)                 \
 | 
| +  case MachineRepresentation::kRep: \
 | 
| +    return OptionalOperator(        \
 | 
| +        flags_ & kUnalignedStore ? &cache_.kUnalignedStore##kRep : nullptr);
 | 
| +    MACHINE_REPRESENTATION_LIST(STORE)
 | 
| +#undef STORE
 | 
| +    case MachineRepresentation::kBit:
 | 
| +    case MachineRepresentation::kNone:
 | 
| +      break;
 | 
| +  }
 | 
| +  UNREACHABLE();
 | 
| +  return OptionalOperator(nullptr);
 | 
| +}
 | 
|  
 | 
|  const Operator* MachineOperatorBuilder::CheckedLoad(
 | 
|      CheckedLoadRepresentation rep) {
 | 
| 
 |