| OLD | NEW | 
|---|
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 #ifndef V8_HYDROGEN_INSTRUCTIONS_H_ | 5 #ifndef V8_HYDROGEN_INSTRUCTIONS_H_ | 
| 6 #define V8_HYDROGEN_INSTRUCTIONS_H_ | 6 #define V8_HYDROGEN_INSTRUCTIONS_H_ | 
| 7 | 7 | 
| 8 #include <cstring> | 8 #include <cstring> | 
| 9 #include <iosfwd> | 9 #include <iosfwd> | 
| 10 | 10 | 
| (...skipping 6951 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 6962     } | 6962     } | 
| 6963   } | 6963   } | 
| 6964 | 6964 | 
| 6965   void SetTransition(HConstant* transition) { | 6965   void SetTransition(HConstant* transition) { | 
| 6966     DCHECK(!has_transition());  // Only set once. | 6966     DCHECK(!has_transition());  // Only set once. | 
| 6967     SetOperandAt(2, transition); | 6967     SetOperandAt(2, transition); | 
| 6968     bit_field_ = HasTransitionField::update(bit_field_, true); | 6968     bit_field_ = HasTransitionField::update(bit_field_, true); | 
| 6969     SetChangesFlag(kMaps); | 6969     SetChangesFlag(kMaps); | 
| 6970   } | 6970   } | 
| 6971 | 6971 | 
|  | 6972   void MarkReceiverAsCell() { | 
|  | 6973     bit_field_ = ReceiverIsCellField::update(bit_field_, true); | 
|  | 6974   } | 
|  | 6975 | 
|  | 6976   bool receiver_is_cell() const { | 
|  | 6977     return ReceiverIsCellField::decode(bit_field_); | 
|  | 6978   } | 
|  | 6979 | 
| 6972   bool NeedsWriteBarrier() const { | 6980   bool NeedsWriteBarrier() const { | 
| 6973     DCHECK(!field_representation().IsDouble() || | 6981     DCHECK(!field_representation().IsDouble() || | 
| 6974            (FLAG_unbox_double_fields && access_.IsInobject()) || | 6982            (FLAG_unbox_double_fields && access_.IsInobject()) || | 
| 6975            !has_transition()); | 6983            !has_transition()); | 
| 6976     if (field_representation().IsDouble()) return false; | 6984     if (field_representation().IsDouble()) return false; | 
| 6977     if (field_representation().IsSmi()) return false; | 6985     if (field_representation().IsSmi()) return false; | 
| 6978     if (field_representation().IsInteger32()) return false; | 6986     if (field_representation().IsInteger32()) return false; | 
| 6979     if (field_representation().IsExternal()) return false; | 6987     if (field_representation().IsExternal()) return false; | 
|  | 6988     if (receiver_is_cell()) return false; | 
| 6980     return StoringValueNeedsWriteBarrier(value()) && | 6989     return StoringValueNeedsWriteBarrier(value()) && | 
| 6981         ReceiverObjectNeedsWriteBarrier(object(), value(), dominator()); | 6990         ReceiverObjectNeedsWriteBarrier(object(), value(), dominator()); | 
| 6982   } | 6991   } | 
| 6983 | 6992 | 
| 6984   bool NeedsWriteBarrierForMap() { | 6993   bool NeedsWriteBarrierForMap() { | 
| 6985     return ReceiverObjectNeedsWriteBarrier(object(), transition(), | 6994     return ReceiverObjectNeedsWriteBarrier(object(), transition(), | 
| 6986                                            dominator()); | 6995                                            dominator()); | 
| 6987   } | 6996   } | 
| 6988 | 6997 | 
| 6989   SmiCheck SmiCheckForWriteBarrier() const { | 6998   SmiCheck SmiCheckForWriteBarrier() const { | 
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 7029     DCHECK(!access.IsInobject() || access.existing_inobject_property() || | 7038     DCHECK(!access.IsInobject() || access.existing_inobject_property() || | 
| 7030            obj->IsAllocate() || obj->IsInnerAllocatedObject()); | 7039            obj->IsAllocate() || obj->IsInnerAllocatedObject()); | 
| 7031     SetOperandAt(0, obj); | 7040     SetOperandAt(0, obj); | 
| 7032     SetOperandAt(1, val); | 7041     SetOperandAt(1, val); | 
| 7033     SetOperandAt(2, obj); | 7042     SetOperandAt(2, obj); | 
| 7034     access.SetGVNFlags(this, STORE); | 7043     access.SetGVNFlags(this, STORE); | 
| 7035   } | 7044   } | 
| 7036 | 7045 | 
| 7037   class HasTransitionField : public BitField<bool, 0, 1> {}; | 7046   class HasTransitionField : public BitField<bool, 0, 1> {}; | 
| 7038   class StoreModeField : public BitField<StoreFieldOrKeyedMode, 1, 1> {}; | 7047   class StoreModeField : public BitField<StoreFieldOrKeyedMode, 1, 1> {}; | 
|  | 7048   class ReceiverIsCellField : public BitField<bool, 2, 1> {}; | 
| 7039 | 7049 | 
| 7040   HObjectAccess access_; | 7050   HObjectAccess access_; | 
| 7041   HValue* dominator_; | 7051   HValue* dominator_; | 
| 7042   uint32_t bit_field_; | 7052   uint32_t bit_field_; | 
| 7043 }; | 7053 }; | 
| 7044 | 7054 | 
| 7045 | 7055 | 
| 7046 class HStoreNamedGeneric FINAL : public HTemplateInstruction<3> { | 7056 class HStoreNamedGeneric FINAL : public HTemplateInstruction<3> { | 
| 7047  public: | 7057  public: | 
| 7048   DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P4(HStoreNamedGeneric, HValue*, | 7058   DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P4(HStoreNamedGeneric, HValue*, | 
| (...skipping 940 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 7989 }; | 7999 }; | 
| 7990 | 8000 | 
| 7991 | 8001 | 
| 7992 | 8002 | 
| 7993 #undef DECLARE_INSTRUCTION | 8003 #undef DECLARE_INSTRUCTION | 
| 7994 #undef DECLARE_CONCRETE_INSTRUCTION | 8004 #undef DECLARE_CONCRETE_INSTRUCTION | 
| 7995 | 8005 | 
| 7996 } }  // namespace v8::internal | 8006 } }  // namespace v8::internal | 
| 7997 | 8007 | 
| 7998 #endif  // V8_HYDROGEN_INSTRUCTIONS_H_ | 8008 #endif  // V8_HYDROGEN_INSTRUCTIONS_H_ | 
| OLD | NEW | 
|---|