| OLD | NEW | 
|---|
| 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 73 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 84   DCHECK_EQ(IrOpcode::kCheckedLoad, op->opcode()); | 84   DCHECK_EQ(IrOpcode::kCheckedLoad, op->opcode()); | 
| 85   return OpParameter<CheckedLoadRepresentation>(op); | 85   return OpParameter<CheckedLoadRepresentation>(op); | 
| 86 } | 86 } | 
| 87 | 87 | 
| 88 | 88 | 
| 89 CheckedStoreRepresentation CheckedStoreRepresentationOf(Operator const* op) { | 89 CheckedStoreRepresentation CheckedStoreRepresentationOf(Operator const* op) { | 
| 90   DCHECK_EQ(IrOpcode::kCheckedStore, op->opcode()); | 90   DCHECK_EQ(IrOpcode::kCheckedStore, op->opcode()); | 
| 91   return OpParameter<CheckedStoreRepresentation>(op); | 91   return OpParameter<CheckedStoreRepresentation>(op); | 
| 92 } | 92 } | 
| 93 | 93 | 
| 94 MachineRepresentation StackSlotRepresentationOf(Operator const* op) { |  | 
| 95   DCHECK_EQ(IrOpcode::kStackSlot, op->opcode()); |  | 
| 96   return OpParameter<MachineRepresentation>(op); |  | 
| 97 } |  | 
| 98 | 94 | 
| 99 #define PURE_OP_LIST(V)                                                       \ | 95 #define PURE_OP_LIST(V)                                                       \ | 
| 100   V(Word32And, Operator::kAssociative | Operator::kCommutative, 2, 0, 1)      \ | 96   V(Word32And, Operator::kAssociative | Operator::kCommutative, 2, 0, 1)      \ | 
| 101   V(Word32Or, Operator::kAssociative | Operator::kCommutative, 2, 0, 1)       \ | 97   V(Word32Or, Operator::kAssociative | Operator::kCommutative, 2, 0, 1)       \ | 
| 102   V(Word32Xor, Operator::kAssociative | Operator::kCommutative, 2, 0, 1)      \ | 98   V(Word32Xor, Operator::kAssociative | Operator::kCommutative, 2, 0, 1)      \ | 
| 103   V(Word32Shl, Operator::kNoProperties, 2, 0, 1)                              \ | 99   V(Word32Shl, Operator::kNoProperties, 2, 0, 1)                              \ | 
| 104   V(Word32Shr, Operator::kNoProperties, 2, 0, 1)                              \ | 100   V(Word32Shr, Operator::kNoProperties, 2, 0, 1)                              \ | 
| 105   V(Word32Sar, Operator::kNoProperties, 2, 0, 1)                              \ | 101   V(Word32Sar, Operator::kNoProperties, 2, 0, 1)                              \ | 
| 106   V(Word32Ror, Operator::kNoProperties, 2, 0, 1)                              \ | 102   V(Word32Ror, Operator::kNoProperties, 2, 0, 1)                              \ | 
| 107   V(Word32Equal, Operator::kCommutative, 2, 0, 1)                             \ | 103   V(Word32Equal, Operator::kCommutative, 2, 0, 1)                             \ | 
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 278     CheckedLoad##Type##Operator()                                              \ | 274     CheckedLoad##Type##Operator()                                              \ | 
| 279         : Operator1<CheckedLoadRepresentation>(                                \ | 275         : Operator1<CheckedLoadRepresentation>(                                \ | 
| 280               IrOpcode::kCheckedLoad, Operator::kNoThrow | Operator::kNoWrite, \ | 276               IrOpcode::kCheckedLoad, Operator::kNoThrow | Operator::kNoWrite, \ | 
| 281               "CheckedLoad", 3, 1, 1, 1, 1, 0, MachineType::Type()) {}         \ | 277               "CheckedLoad", 3, 1, 1, 1, 1, 0, MachineType::Type()) {}         \ | 
| 282   };                                                                           \ | 278   };                                                                           \ | 
| 283   Load##Type##Operator kLoad##Type;                                            \ | 279   Load##Type##Operator kLoad##Type;                                            \ | 
| 284   CheckedLoad##Type##Operator kCheckedLoad##Type; | 280   CheckedLoad##Type##Operator kCheckedLoad##Type; | 
| 285   MACHINE_TYPE_LIST(LOAD) | 281   MACHINE_TYPE_LIST(LOAD) | 
| 286 #undef LOAD | 282 #undef LOAD | 
| 287 | 283 | 
| 288 #define STACKSLOT(Type)                                                       \ |  | 
| 289   struct StackSlot##Type##Operator final                                      \ |  | 
| 290       : public Operator1<MachineRepresentation> {                             \ |  | 
| 291     StackSlot##Type##Operator()                                               \ |  | 
| 292         : Operator1<MachineRepresentation>(                                   \ |  | 
| 293               IrOpcode::kStackSlot, Operator::kNoThrow, "StackSlot", 0, 0, 0, \ |  | 
| 294               1, 0, 0, MachineType::Type().representation()) {}               \ |  | 
| 295   };                                                                          \ |  | 
| 296   StackSlot##Type##Operator kStackSlot##Type; |  | 
| 297   MACHINE_TYPE_LIST(STACKSLOT) |  | 
| 298 #undef STACKSLOT |  | 
| 299 |  | 
| 300 #define STORE(Type)                                                            \ | 284 #define STORE(Type)                                                            \ | 
| 301   struct Store##Type##Operator : public Operator1<StoreRepresentation> {       \ | 285   struct Store##Type##Operator : public Operator1<StoreRepresentation> {       \ | 
| 302     explicit Store##Type##Operator(WriteBarrierKind write_barrier_kind)        \ | 286     explicit Store##Type##Operator(WriteBarrierKind write_barrier_kind)        \ | 
| 303         : Operator1<StoreRepresentation>(                                      \ | 287         : Operator1<StoreRepresentation>(                                      \ | 
| 304               IrOpcode::kStore, Operator::kNoRead | Operator::kNoThrow,        \ | 288               IrOpcode::kStore, Operator::kNoRead | Operator::kNoThrow,        \ | 
| 305               "Store", 3, 1, 1, 0, 1, 0,                                       \ | 289               "Store", 3, 1, 1, 0, 1, 0,                                       \ | 
| 306               StoreRepresentation(MachineRepresentation::Type,                 \ | 290               StoreRepresentation(MachineRepresentation::Type,                 \ | 
| 307                                   write_barrier_kind)) {}                      \ | 291                                   write_barrier_kind)) {}                      \ | 
| 308   };                                                                           \ | 292   };                                                                           \ | 
| 309   struct Store##Type##NoWriteBarrier##Operator final                           \ | 293   struct Store##Type##NoWriteBarrier##Operator final                           \ | 
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 390 #define LOAD(Type)                  \ | 374 #define LOAD(Type)                  \ | 
| 391   if (rep == MachineType::Type()) { \ | 375   if (rep == MachineType::Type()) { \ | 
| 392     return &cache_.kLoad##Type;     \ | 376     return &cache_.kLoad##Type;     \ | 
| 393   } | 377   } | 
| 394     MACHINE_TYPE_LIST(LOAD) | 378     MACHINE_TYPE_LIST(LOAD) | 
| 395 #undef LOAD | 379 #undef LOAD | 
| 396   UNREACHABLE(); | 380   UNREACHABLE(); | 
| 397   return nullptr; | 381   return nullptr; | 
| 398 } | 382 } | 
| 399 | 383 | 
| 400 const Operator* MachineOperatorBuilder::StackSlot(MachineRepresentation rep) { |  | 
| 401 #define STACKSLOT(Type)                              \ |  | 
| 402   if (rep == MachineType::Type().representation()) { \ |  | 
| 403     return &cache_.kStackSlot##Type;                 \ |  | 
| 404   } |  | 
| 405   MACHINE_TYPE_LIST(STACKSLOT) |  | 
| 406 #undef STACKSLOT |  | 
| 407   UNREACHABLE(); |  | 
| 408   return nullptr; |  | 
| 409 } |  | 
| 410 | 384 | 
| 411 const Operator* MachineOperatorBuilder::Store(StoreRepresentation store_rep) { | 385 const Operator* MachineOperatorBuilder::Store(StoreRepresentation store_rep) { | 
| 412   switch (store_rep.representation()) { | 386   switch (store_rep.representation()) { | 
| 413 #define STORE(kRep)                                         \ | 387 #define STORE(kRep)                                         \ | 
| 414   case MachineRepresentation::kRep:                         \ | 388   case MachineRepresentation::kRep:                         \ | 
| 415     switch (store_rep.write_barrier_kind()) {               \ | 389     switch (store_rep.write_barrier_kind()) {               \ | 
| 416       case kNoWriteBarrier:                                 \ | 390       case kNoWriteBarrier:                                 \ | 
| 417         return &cache_.k##Store##kRep##NoWriteBarrier;      \ | 391         return &cache_.k##Store##kRep##NoWriteBarrier;      \ | 
| 418       case kMapWriteBarrier:                                \ | 392       case kMapWriteBarrier:                                \ | 
| 419         return &cache_.k##Store##kRep##MapWriteBarrier;     \ | 393         return &cache_.k##Store##kRep##MapWriteBarrier;     \ | 
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 459     case MachineRepresentation::kNone: | 433     case MachineRepresentation::kNone: | 
| 460       break; | 434       break; | 
| 461   } | 435   } | 
| 462   UNREACHABLE(); | 436   UNREACHABLE(); | 
| 463   return nullptr; | 437   return nullptr; | 
| 464 } | 438 } | 
| 465 | 439 | 
| 466 }  // namespace compiler | 440 }  // namespace compiler | 
| 467 }  // namespace internal | 441 }  // namespace internal | 
| 468 }  // namespace v8 | 442 }  // namespace v8 | 
| OLD | NEW | 
|---|