Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(774)

Side by Side Diff: src/hydrogen-instructions.h

Issue 295913009: Allow specifying base offset when constructing Keyed hydrogen instructions (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Remove more unnecessary code Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/hydrogen-dehoist.cc ('k') | src/hydrogen-instructions.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "v8.h" 8 #include "v8.h"
9 9
10 #include "allocation.h" 10 #include "allocation.h"
(...skipping 1061 matching lines...) Expand 10 before | Expand all | Expand 10 after
1072 static I* New(Zone* zone, \ 1072 static I* New(Zone* zone, \
1073 HValue* context, \ 1073 HValue* context, \
1074 P1 p1, \ 1074 P1 p1, \
1075 P2 p2, \ 1075 P2 p2, \
1076 P3 p3, \ 1076 P3 p3, \
1077 P4 p4, \ 1077 P4 p4, \
1078 P5 p5) { \ 1078 P5 p5) { \
1079 return new(zone) I(p1, p2, p3, p4, p5); \ 1079 return new(zone) I(p1, p2, p3, p4, p5); \
1080 } 1080 }
1081 1081
1082 #define DECLARE_INSTRUCTION_FACTORY_P6(I, P1, P2, P3, P4, P5, P6) \
1083 static I* New(Zone* zone, \
1084 HValue* context, \
1085 P1 p1, \
1086 P2 p2, \
1087 P3 p3, \
1088 P4 p4, \
1089 P5 p5, \
1090 P6 p6) { \
1091 return new(zone) I(p1, p2, p3, p4, p5, p6); \
1092 }
1093
1082 #define DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P0(I) \ 1094 #define DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P0(I) \
1083 static I* New(Zone* zone, HValue* context) { \ 1095 static I* New(Zone* zone, HValue* context) { \
1084 return new(zone) I(context); \ 1096 return new(zone) I(context); \
1085 } 1097 }
1086 1098
1087 #define DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P1(I, P1) \ 1099 #define DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P1(I, P1) \
1088 static I* New(Zone* zone, HValue* context, P1 p1) { \ 1100 static I* New(Zone* zone, HValue* context, P1 p1) { \
1089 return new(zone) I(context, p1); \ 1101 return new(zone) I(context, p1); \
1090 } 1102 }
1091 1103
(...skipping 5314 matching lines...) Expand 10 before | Expand all | Expand 10 after
6406 set_representation(Representation::Tagged()); 6418 set_representation(Representation::Tagged());
6407 SetFlag(kUseGVN); 6419 SetFlag(kUseGVN);
6408 SetDependsOnFlag(kCalls); 6420 SetDependsOnFlag(kCalls);
6409 } 6421 }
6410 }; 6422 };
6411 6423
6412 class ArrayInstructionInterface { 6424 class ArrayInstructionInterface {
6413 public: 6425 public:
6414 virtual HValue* GetKey() = 0; 6426 virtual HValue* GetKey() = 0;
6415 virtual void SetKey(HValue* key) = 0; 6427 virtual void SetKey(HValue* key) = 0;
6416 virtual void SetIndexOffset(uint32_t index_offset) = 0; 6428 virtual ElementsKind elements_kind() const = 0;
6417 virtual int MaxIndexOffsetBits() = 0; 6429 virtual void IncreaseBaseOffset(uint32_t base_offset) = 0;
6430 virtual int MaxBaseOffsetBits() = 0;
6418 virtual bool IsDehoisted() = 0; 6431 virtual bool IsDehoisted() = 0;
6419 virtual void SetDehoisted(bool is_dehoisted) = 0; 6432 virtual void SetDehoisted(bool is_dehoisted) = 0;
6420 virtual ~ArrayInstructionInterface() { } 6433 virtual ~ArrayInstructionInterface() { }
6421 6434
6422 static Representation KeyedAccessIndexRequirement(Representation r) { 6435 static Representation KeyedAccessIndexRequirement(Representation r) {
6423 return r.IsInteger32() || SmiValuesAre32Bits() 6436 return r.IsInteger32() || SmiValuesAre32Bits()
6424 ? Representation::Integer32() : Representation::Smi(); 6437 ? Representation::Integer32() : Representation::Smi();
6425 } 6438 }
6426 }; 6439 };
6427 6440
6428 6441
6442 static const int kDefaultKeyedHeaderOffsetSentinel = -1;
6443
6429 enum LoadKeyedHoleMode { 6444 enum LoadKeyedHoleMode {
6430 NEVER_RETURN_HOLE, 6445 NEVER_RETURN_HOLE,
6431 ALLOW_RETURN_HOLE 6446 ALLOW_RETURN_HOLE
6432 }; 6447 };
6433 6448
6434 6449
6435 class HLoadKeyed V8_FINAL 6450 class HLoadKeyed V8_FINAL
6436 : public HTemplateInstruction<3>, public ArrayInstructionInterface { 6451 : public HTemplateInstruction<3>, public ArrayInstructionInterface {
6437 public: 6452 public:
6438 DECLARE_INSTRUCTION_FACTORY_P4(HLoadKeyed, HValue*, HValue*, HValue*, 6453 DECLARE_INSTRUCTION_FACTORY_P4(HLoadKeyed, HValue*, HValue*, HValue*,
6439 ElementsKind); 6454 ElementsKind);
6440 DECLARE_INSTRUCTION_FACTORY_P5(HLoadKeyed, HValue*, HValue*, HValue*, 6455 DECLARE_INSTRUCTION_FACTORY_P5(HLoadKeyed, HValue*, HValue*, HValue*,
6441 ElementsKind, LoadKeyedHoleMode); 6456 ElementsKind, LoadKeyedHoleMode);
6457 DECLARE_INSTRUCTION_FACTORY_P6(HLoadKeyed, HValue*, HValue*, HValue*,
6458 ElementsKind, LoadKeyedHoleMode, int);
6442 6459
6443 bool is_external() const { 6460 bool is_external() const {
6444 return IsExternalArrayElementsKind(elements_kind()); 6461 return IsExternalArrayElementsKind(elements_kind());
6445 } 6462 }
6446 bool is_fixed_typed_array() const { 6463 bool is_fixed_typed_array() const {
6447 return IsFixedTypedArrayElementsKind(elements_kind()); 6464 return IsFixedTypedArrayElementsKind(elements_kind());
6448 } 6465 }
6449 bool is_typed_elements() const { 6466 bool is_typed_elements() const {
6450 return is_external() || is_fixed_typed_array(); 6467 return is_external() || is_fixed_typed_array();
6451 } 6468 }
6452 HValue* elements() { return OperandAt(0); } 6469 HValue* elements() { return OperandAt(0); }
6453 HValue* key() { return OperandAt(1); } 6470 HValue* key() { return OperandAt(1); }
6454 HValue* dependency() { 6471 HValue* dependency() {
6455 ASSERT(HasDependency()); 6472 ASSERT(HasDependency());
6456 return OperandAt(2); 6473 return OperandAt(2);
6457 } 6474 }
6458 bool HasDependency() const { return OperandAt(0) != OperandAt(2); } 6475 bool HasDependency() const { return OperandAt(0) != OperandAt(2); }
6459 uint32_t index_offset() { return IndexOffsetField::decode(bit_field_); } 6476 uint32_t base_offset() { return BaseOffsetField::decode(bit_field_); }
6460 void SetIndexOffset(uint32_t index_offset) { 6477 void IncreaseBaseOffset(uint32_t base_offset) {
6461 bit_field_ = IndexOffsetField::update(bit_field_, index_offset); 6478 base_offset += BaseOffsetField::decode(bit_field_);
6479 bit_field_ = BaseOffsetField::update(bit_field_, base_offset);
6462 } 6480 }
6463 virtual int MaxIndexOffsetBits() { 6481 virtual int MaxBaseOffsetBits() {
6464 return kBitsForIndexOffset; 6482 return kBitsForBaseOffset;
6465 } 6483 }
6466 HValue* GetKey() { return key(); } 6484 HValue* GetKey() { return key(); }
6467 void SetKey(HValue* key) { SetOperandAt(1, key); } 6485 void SetKey(HValue* key) { SetOperandAt(1, key); }
6468 bool IsDehoisted() { return IsDehoistedField::decode(bit_field_); } 6486 bool IsDehoisted() { return IsDehoistedField::decode(bit_field_); }
6469 void SetDehoisted(bool is_dehoisted) { 6487 void SetDehoisted(bool is_dehoisted) {
6470 bit_field_ = IsDehoistedField::update(bit_field_, is_dehoisted); 6488 bit_field_ = IsDehoistedField::update(bit_field_, is_dehoisted);
6471 } 6489 }
6472 ElementsKind elements_kind() const { 6490 ElementsKind elements_kind() const {
6473 return ElementsKindField::decode(bit_field_); 6491 return ElementsKindField::decode(bit_field_);
6474 } 6492 }
(...skipping 29 matching lines...) Expand all
6504 6522
6505 virtual Range* InferRange(Zone* zone) V8_OVERRIDE; 6523 virtual Range* InferRange(Zone* zone) V8_OVERRIDE;
6506 6524
6507 DECLARE_CONCRETE_INSTRUCTION(LoadKeyed) 6525 DECLARE_CONCRETE_INSTRUCTION(LoadKeyed)
6508 6526
6509 protected: 6527 protected:
6510 virtual bool DataEquals(HValue* other) V8_OVERRIDE { 6528 virtual bool DataEquals(HValue* other) V8_OVERRIDE {
6511 if (!other->IsLoadKeyed()) return false; 6529 if (!other->IsLoadKeyed()) return false;
6512 HLoadKeyed* other_load = HLoadKeyed::cast(other); 6530 HLoadKeyed* other_load = HLoadKeyed::cast(other);
6513 6531
6514 if (IsDehoisted() && index_offset() != other_load->index_offset()) 6532 if (IsDehoisted() && base_offset() != other_load->base_offset())
6515 return false; 6533 return false;
6516 return elements_kind() == other_load->elements_kind(); 6534 return elements_kind() == other_load->elements_kind();
6517 } 6535 }
6518 6536
6519 private: 6537 private:
6520 HLoadKeyed(HValue* obj, 6538 HLoadKeyed(HValue* obj,
6521 HValue* key, 6539 HValue* key,
6522 HValue* dependency, 6540 HValue* dependency,
6523 ElementsKind elements_kind, 6541 ElementsKind elements_kind,
6524 LoadKeyedHoleMode mode = NEVER_RETURN_HOLE) 6542 LoadKeyedHoleMode mode = NEVER_RETURN_HOLE,
6543 int offset = kDefaultKeyedHeaderOffsetSentinel)
6525 : bit_field_(0) { 6544 : bit_field_(0) {
6545 offset = offset == kDefaultKeyedHeaderOffsetSentinel
6546 ? GetDefaultHeaderSizeForElementsKind(elements_kind)
6547 : offset;
6526 bit_field_ = ElementsKindField::encode(elements_kind) | 6548 bit_field_ = ElementsKindField::encode(elements_kind) |
6527 HoleModeField::encode(mode); 6549 HoleModeField::encode(mode) |
6550 BaseOffsetField::encode(offset);
6528 6551
6529 SetOperandAt(0, obj); 6552 SetOperandAt(0, obj);
6530 SetOperandAt(1, key); 6553 SetOperandAt(1, key);
6531 SetOperandAt(2, dependency != NULL ? dependency : obj); 6554 SetOperandAt(2, dependency != NULL ? dependency : obj);
6532 6555
6533 if (!is_typed_elements()) { 6556 if (!is_typed_elements()) {
6534 // I can detect the case between storing double (holey and fast) and 6557 // I can detect the case between storing double (holey and fast) and
6535 // smi/object by looking at elements_kind_. 6558 // smi/object by looking at elements_kind_.
6536 ASSERT(IsFastSmiOrObjectElementsKind(elements_kind) || 6559 ASSERT(IsFastSmiOrObjectElementsKind(elements_kind) ||
6537 IsFastDoubleElementsKind(elements_kind)); 6560 IsFastDoubleElementsKind(elements_kind));
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
6580 } 6603 }
6581 6604
6582 virtual bool IsDeletable() const V8_OVERRIDE { 6605 virtual bool IsDeletable() const V8_OVERRIDE {
6583 return !RequiresHoleCheck(); 6606 return !RequiresHoleCheck();
6584 } 6607 }
6585 6608
6586 // Establish some checks around our packed fields 6609 // Establish some checks around our packed fields
6587 enum LoadKeyedBits { 6610 enum LoadKeyedBits {
6588 kBitsForElementsKind = 5, 6611 kBitsForElementsKind = 5,
6589 kBitsForHoleMode = 1, 6612 kBitsForHoleMode = 1,
6590 kBitsForIndexOffset = 25, 6613 kBitsForBaseOffset = 25,
6591 kBitsForIsDehoisted = 1, 6614 kBitsForIsDehoisted = 1,
6592 6615
6593 kStartElementsKind = 0, 6616 kStartElementsKind = 0,
6594 kStartHoleMode = kStartElementsKind + kBitsForElementsKind, 6617 kStartHoleMode = kStartElementsKind + kBitsForElementsKind,
6595 kStartIndexOffset = kStartHoleMode + kBitsForHoleMode, 6618 kStartBaseOffset = kStartHoleMode + kBitsForHoleMode,
6596 kStartIsDehoisted = kStartIndexOffset + kBitsForIndexOffset 6619 kStartIsDehoisted = kStartBaseOffset + kBitsForBaseOffset
6597 }; 6620 };
6598 6621
6599 STATIC_ASSERT((kBitsForElementsKind + kBitsForIndexOffset + 6622 STATIC_ASSERT((kBitsForElementsKind + kBitsForBaseOffset +
6600 kBitsForIsDehoisted) <= sizeof(uint32_t)*8); 6623 kBitsForIsDehoisted) <= sizeof(uint32_t)*8);
6601 STATIC_ASSERT(kElementsKindCount <= (1 << kBitsForElementsKind)); 6624 STATIC_ASSERT(kElementsKindCount <= (1 << kBitsForElementsKind));
6602 class ElementsKindField: 6625 class ElementsKindField:
6603 public BitField<ElementsKind, kStartElementsKind, kBitsForElementsKind> 6626 public BitField<ElementsKind, kStartElementsKind, kBitsForElementsKind>
6604 {}; // NOLINT 6627 {}; // NOLINT
6605 class HoleModeField: 6628 class HoleModeField:
6606 public BitField<LoadKeyedHoleMode, kStartHoleMode, kBitsForHoleMode> 6629 public BitField<LoadKeyedHoleMode, kStartHoleMode, kBitsForHoleMode>
6607 {}; // NOLINT 6630 {}; // NOLINT
6608 class IndexOffsetField: 6631 class BaseOffsetField:
6609 public BitField<uint32_t, kStartIndexOffset, kBitsForIndexOffset> 6632 public BitField<uint32_t, kStartBaseOffset, kBitsForBaseOffset>
6610 {}; // NOLINT 6633 {}; // NOLINT
6611 class IsDehoistedField: 6634 class IsDehoistedField:
6612 public BitField<bool, kStartIsDehoisted, kBitsForIsDehoisted> 6635 public BitField<bool, kStartIsDehoisted, kBitsForIsDehoisted>
6613 {}; // NOLINT 6636 {}; // NOLINT
6614 uint32_t bit_field_; 6637 uint32_t bit_field_;
6615 }; 6638 };
6616 6639
6617 6640
6618 class HLoadKeyedGeneric V8_FINAL : public HTemplateInstruction<3> { 6641 class HLoadKeyedGeneric V8_FINAL : public HTemplateInstruction<3> {
6619 public: 6642 public:
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
6816 }; 6839 };
6817 6840
6818 6841
6819 class HStoreKeyed V8_FINAL 6842 class HStoreKeyed V8_FINAL
6820 : public HTemplateInstruction<3>, public ArrayInstructionInterface { 6843 : public HTemplateInstruction<3>, public ArrayInstructionInterface {
6821 public: 6844 public:
6822 DECLARE_INSTRUCTION_FACTORY_P4(HStoreKeyed, HValue*, HValue*, HValue*, 6845 DECLARE_INSTRUCTION_FACTORY_P4(HStoreKeyed, HValue*, HValue*, HValue*,
6823 ElementsKind); 6846 ElementsKind);
6824 DECLARE_INSTRUCTION_FACTORY_P5(HStoreKeyed, HValue*, HValue*, HValue*, 6847 DECLARE_INSTRUCTION_FACTORY_P5(HStoreKeyed, HValue*, HValue*, HValue*,
6825 ElementsKind, StoreFieldOrKeyedMode); 6848 ElementsKind, StoreFieldOrKeyedMode);
6849 DECLARE_INSTRUCTION_FACTORY_P6(HStoreKeyed, HValue*, HValue*, HValue*,
6850 ElementsKind, StoreFieldOrKeyedMode, int);
6826 6851
6827 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { 6852 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE {
6828 // kind_fast: tagged[int32] = tagged 6853 // kind_fast: tagged[int32] = tagged
6829 // kind_double: tagged[int32] = double 6854 // kind_double: tagged[int32] = double
6830 // kind_smi : tagged[int32] = smi 6855 // kind_smi : tagged[int32] = smi
6831 // kind_fixed_typed_array: tagged[int32] = (double | int32) 6856 // kind_fixed_typed_array: tagged[int32] = (double | int32)
6832 // kind_external: external[int32] = (double | int32) 6857 // kind_external: external[int32] = (double | int32)
6833 if (index == 0) { 6858 if (index == 0) {
6834 return is_external() ? Representation::External() 6859 return is_external() ? Representation::External()
6835 : Representation::Tagged(); 6860 : Representation::Tagged();
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
6888 } 6913 }
6889 6914
6890 HValue* elements() { return OperandAt(0); } 6915 HValue* elements() { return OperandAt(0); }
6891 HValue* key() { return OperandAt(1); } 6916 HValue* key() { return OperandAt(1); }
6892 HValue* value() { return OperandAt(2); } 6917 HValue* value() { return OperandAt(2); }
6893 bool value_is_smi() const { 6918 bool value_is_smi() const {
6894 return IsFastSmiElementsKind(elements_kind_); 6919 return IsFastSmiElementsKind(elements_kind_);
6895 } 6920 }
6896 StoreFieldOrKeyedMode store_mode() const { return store_mode_; } 6921 StoreFieldOrKeyedMode store_mode() const { return store_mode_; }
6897 ElementsKind elements_kind() const { return elements_kind_; } 6922 ElementsKind elements_kind() const { return elements_kind_; }
6898 uint32_t index_offset() { return index_offset_; } 6923 uint32_t base_offset() { return base_offset_; }
6899 void SetIndexOffset(uint32_t index_offset) { index_offset_ = index_offset; } 6924 void IncreaseBaseOffset(uint32_t base_offset) {
6900 virtual int MaxIndexOffsetBits() { 6925 base_offset_ += base_offset;
6926 }
6927 virtual int MaxBaseOffsetBits() {
6901 return 31 - ElementsKindToShiftSize(elements_kind_); 6928 return 31 - ElementsKindToShiftSize(elements_kind_);
6902 } 6929 }
6903 HValue* GetKey() { return key(); } 6930 HValue* GetKey() { return key(); }
6904 void SetKey(HValue* key) { SetOperandAt(1, key); } 6931 void SetKey(HValue* key) { SetOperandAt(1, key); }
6905 bool IsDehoisted() { return is_dehoisted_; } 6932 bool IsDehoisted() { return is_dehoisted_; }
6906 void SetDehoisted(bool is_dehoisted) { is_dehoisted_ = is_dehoisted; } 6933 void SetDehoisted(bool is_dehoisted) { is_dehoisted_ = is_dehoisted; }
6907 bool IsUninitialized() { return is_uninitialized_; } 6934 bool IsUninitialized() { return is_uninitialized_; }
6908 void SetUninitialized(bool is_uninitialized) { 6935 void SetUninitialized(bool is_uninitialized) {
6909 is_uninitialized_ = is_uninitialized; 6936 is_uninitialized_ = is_uninitialized;
6910 } 6937 }
(...skipping 23 matching lines...) Expand all
6934 6961
6935 bool NeedsCanonicalization(); 6962 bool NeedsCanonicalization();
6936 6963
6937 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; 6964 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
6938 6965
6939 DECLARE_CONCRETE_INSTRUCTION(StoreKeyed) 6966 DECLARE_CONCRETE_INSTRUCTION(StoreKeyed)
6940 6967
6941 private: 6968 private:
6942 HStoreKeyed(HValue* obj, HValue* key, HValue* val, 6969 HStoreKeyed(HValue* obj, HValue* key, HValue* val,
6943 ElementsKind elements_kind, 6970 ElementsKind elements_kind,
6944 StoreFieldOrKeyedMode store_mode = INITIALIZING_STORE) 6971 StoreFieldOrKeyedMode store_mode = INITIALIZING_STORE,
6972 int offset = kDefaultKeyedHeaderOffsetSentinel)
6945 : elements_kind_(elements_kind), 6973 : elements_kind_(elements_kind),
6946 index_offset_(0), 6974 base_offset_(offset == kDefaultKeyedHeaderOffsetSentinel
6975 ? GetDefaultHeaderSizeForElementsKind(elements_kind)
6976 : offset),
6947 is_dehoisted_(false), 6977 is_dehoisted_(false),
6948 is_uninitialized_(false), 6978 is_uninitialized_(false),
6949 store_mode_(store_mode), 6979 store_mode_(store_mode),
6950 new_space_dominator_(NULL) { 6980 new_space_dominator_(NULL) {
6951 SetOperandAt(0, obj); 6981 SetOperandAt(0, obj);
6952 SetOperandAt(1, key); 6982 SetOperandAt(1, key);
6953 SetOperandAt(2, val); 6983 SetOperandAt(2, val);
6954 6984
6955 ASSERT(store_mode != STORE_TO_INITIALIZED_ENTRY || 6985 ASSERT(store_mode != STORE_TO_INITIALIZED_ENTRY ||
6956 elements_kind == FAST_SMI_ELEMENTS); 6986 elements_kind == FAST_SMI_ELEMENTS);
(...skipping 19 matching lines...) Expand all
6976 // EXTERNAL_{UNSIGNED_,}{BYTE,SHORT,INT}_ELEMENTS are truncating. 7006 // EXTERNAL_{UNSIGNED_,}{BYTE,SHORT,INT}_ELEMENTS are truncating.
6977 if ((elements_kind >= EXTERNAL_INT8_ELEMENTS && 7007 if ((elements_kind >= EXTERNAL_INT8_ELEMENTS &&
6978 elements_kind <= EXTERNAL_UINT32_ELEMENTS) || 7008 elements_kind <= EXTERNAL_UINT32_ELEMENTS) ||
6979 (elements_kind >= UINT8_ELEMENTS && 7009 (elements_kind >= UINT8_ELEMENTS &&
6980 elements_kind <= INT32_ELEMENTS)) { 7010 elements_kind <= INT32_ELEMENTS)) {
6981 SetFlag(kTruncatingToInt32); 7011 SetFlag(kTruncatingToInt32);
6982 } 7012 }
6983 } 7013 }
6984 7014
6985 ElementsKind elements_kind_; 7015 ElementsKind elements_kind_;
6986 uint32_t index_offset_; 7016 uint32_t base_offset_;
6987 bool is_dehoisted_ : 1; 7017 bool is_dehoisted_ : 1;
6988 bool is_uninitialized_ : 1; 7018 bool is_uninitialized_ : 1;
6989 StoreFieldOrKeyedMode store_mode_: 1; 7019 StoreFieldOrKeyedMode store_mode_: 1;
6990 HValue* new_space_dominator_; 7020 HValue* new_space_dominator_;
6991 }; 7021 };
6992 7022
6993 7023
6994 class HStoreKeyedGeneric V8_FINAL : public HTemplateInstruction<4> { 7024 class HStoreKeyedGeneric V8_FINAL : public HTemplateInstruction<4> {
6995 public: 7025 public:
6996 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P4(HStoreKeyedGeneric, HValue*, 7026 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P4(HStoreKeyedGeneric, HValue*,
(...skipping 714 matching lines...) Expand 10 before | Expand all | Expand 10 after
7711 virtual bool IsDeletable() const V8_OVERRIDE { return true; } 7741 virtual bool IsDeletable() const V8_OVERRIDE { return true; }
7712 }; 7742 };
7713 7743
7714 7744
7715 #undef DECLARE_INSTRUCTION 7745 #undef DECLARE_INSTRUCTION
7716 #undef DECLARE_CONCRETE_INSTRUCTION 7746 #undef DECLARE_CONCRETE_INSTRUCTION
7717 7747
7718 } } // namespace v8::internal 7748 } } // namespace v8::internal
7719 7749
7720 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ 7750 #endif // V8_HYDROGEN_INSTRUCTIONS_H_
OLDNEW
« no previous file with comments | « src/hydrogen-dehoist.cc ('k') | src/hydrogen-instructions.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698