OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 5808 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5819 } | 5819 } |
5820 | 5820 |
5821 static HObjectAccess ForNextFunctionLinkPointer() { | 5821 static HObjectAccess ForNextFunctionLinkPointer() { |
5822 return HObjectAccess(kInobject, JSFunction::kNextFunctionLinkOffset); | 5822 return HObjectAccess(kInobject, JSFunction::kNextFunctionLinkOffset); |
5823 } | 5823 } |
5824 | 5824 |
5825 static HObjectAccess ForArrayLength(ElementsKind elements_kind) { | 5825 static HObjectAccess ForArrayLength(ElementsKind elements_kind) { |
5826 return HObjectAccess( | 5826 return HObjectAccess( |
5827 kArrayLengths, | 5827 kArrayLengths, |
5828 JSArray::kLengthOffset, | 5828 JSArray::kLengthOffset, |
5829 IsFastElementsKind(elements_kind) && | 5829 IsFastElementsKind(elements_kind) |
5830 FLAG_track_fields | 5830 ? Representation::Smi() : Representation::Tagged()); |
5831 ? Representation::Smi() : Representation::Tagged()); | |
5832 } | 5831 } |
5833 | 5832 |
5834 static HObjectAccess ForAllocationSiteOffset(int offset); | 5833 static HObjectAccess ForAllocationSiteOffset(int offset); |
5835 | 5834 |
5836 static HObjectAccess ForAllocationSiteList() { | 5835 static HObjectAccess ForAllocationSiteList() { |
5837 return HObjectAccess(kExternalMemory, 0, Representation::Tagged(), | 5836 return HObjectAccess(kExternalMemory, 0, Representation::Tagged(), |
5838 Handle<String>::null(), false, false); | 5837 Handle<String>::null(), false, false); |
5839 } | 5838 } |
5840 | 5839 |
5841 static HObjectAccess ForFixedArrayLength() { | 5840 static HObjectAccess ForFixedArrayLength() { |
5842 return HObjectAccess( | 5841 return HObjectAccess( |
5843 kArrayLengths, | 5842 kArrayLengths, |
5844 FixedArray::kLengthOffset, | 5843 FixedArray::kLengthOffset, |
5845 FLAG_track_fields ? Representation::Smi() : Representation::Tagged()); | 5844 Representation::Smi()); |
5846 } | 5845 } |
5847 | 5846 |
5848 static HObjectAccess ForStringHashField() { | 5847 static HObjectAccess ForStringHashField() { |
5849 return HObjectAccess(kInobject, | 5848 return HObjectAccess(kInobject, |
5850 String::kHashFieldOffset, | 5849 String::kHashFieldOffset, |
5851 Representation::Integer32()); | 5850 Representation::Integer32()); |
5852 } | 5851 } |
5853 | 5852 |
5854 static HObjectAccess ForStringLength() { | 5853 static HObjectAccess ForStringLength() { |
5855 STATIC_ASSERT(String::kMaxLength <= Smi::kMaxValue); | 5854 STATIC_ASSERT(String::kMaxLength <= Smi::kMaxValue); |
5856 return HObjectAccess( | 5855 return HObjectAccess( |
5857 kStringLengths, | 5856 kStringLengths, |
5858 String::kLengthOffset, | 5857 String::kLengthOffset, |
5859 FLAG_track_fields ? Representation::Smi() : Representation::Tagged()); | 5858 Representation::Smi()); |
5860 } | 5859 } |
5861 | 5860 |
5862 static HObjectAccess ForConsStringFirst() { | 5861 static HObjectAccess ForConsStringFirst() { |
5863 return HObjectAccess(kInobject, ConsString::kFirstOffset); | 5862 return HObjectAccess(kInobject, ConsString::kFirstOffset); |
5864 } | 5863 } |
5865 | 5864 |
5866 static HObjectAccess ForConsStringSecond() { | 5865 static HObjectAccess ForConsStringSecond() { |
5867 return HObjectAccess(kInobject, ConsString::kSecondOffset); | 5866 return HObjectAccess(kInobject, ConsString::kSecondOffset); |
5868 } | 5867 } |
5869 | 5868 |
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6140 set_type(HType::Smi()); | 6139 set_type(HType::Smi()); |
6141 if (SmiValuesAre32Bits()) { | 6140 if (SmiValuesAre32Bits()) { |
6142 set_representation(Representation::Integer32()); | 6141 set_representation(Representation::Integer32()); |
6143 } else { | 6142 } else { |
6144 set_representation(representation); | 6143 set_representation(representation); |
6145 } | 6144 } |
6146 } else if (representation.IsDouble() || | 6145 } else if (representation.IsDouble() || |
6147 representation.IsExternal() || | 6146 representation.IsExternal() || |
6148 representation.IsInteger32()) { | 6147 representation.IsInteger32()) { |
6149 set_representation(representation); | 6148 set_representation(representation); |
6150 } else if (FLAG_track_heap_object_fields && | 6149 } else if (representation.IsHeapObject()) { |
6151 representation.IsHeapObject()) { | |
6152 set_type(HType::NonPrimitive()); | 6150 set_type(HType::NonPrimitive()); |
6153 set_representation(Representation::Tagged()); | 6151 set_representation(Representation::Tagged()); |
6154 } else { | 6152 } else { |
6155 set_representation(Representation::Tagged()); | 6153 set_representation(Representation::Tagged()); |
6156 } | 6154 } |
6157 access.SetGVNFlags(this, LOAD); | 6155 access.SetGVNFlags(this, LOAD); |
6158 } | 6156 } |
6159 | 6157 |
6160 virtual bool IsDeletable() const V8_OVERRIDE { return true; } | 6158 virtual bool IsDeletable() const V8_OVERRIDE { return true; } |
6161 | 6159 |
(...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6539 ASSERT(!has_transition()); // Only set once. | 6537 ASSERT(!has_transition()); // Only set once. |
6540 Handle<Map> map = Handle<Map>::cast(map_constant->handle(info->isolate())); | 6538 Handle<Map> map = Handle<Map>::cast(map_constant->handle(info->isolate())); |
6541 if (map->CanBeDeprecated()) { | 6539 if (map->CanBeDeprecated()) { |
6542 map->AddDependentCompilationInfo(DependentCode::kTransitionGroup, info); | 6540 map->AddDependentCompilationInfo(DependentCode::kTransitionGroup, info); |
6543 } | 6541 } |
6544 SetOperandAt(2, map_constant); | 6542 SetOperandAt(2, map_constant); |
6545 has_transition_ = true; | 6543 has_transition_ = true; |
6546 } | 6544 } |
6547 | 6545 |
6548 bool NeedsWriteBarrier() { | 6546 bool NeedsWriteBarrier() { |
6549 ASSERT(!(FLAG_track_double_fields && field_representation().IsDouble()) || | 6547 ASSERT(!field_representation().IsDouble() || !has_transition()); |
6550 !has_transition()); | |
6551 if (IsSkipWriteBarrier()) return false; | 6548 if (IsSkipWriteBarrier()) return false; |
6552 if (field_representation().IsDouble()) return false; | 6549 if (field_representation().IsDouble()) return false; |
6553 if (field_representation().IsSmi()) return false; | 6550 if (field_representation().IsSmi()) return false; |
6554 if (field_representation().IsInteger32()) return false; | 6551 if (field_representation().IsInteger32()) return false; |
6555 if (field_representation().IsExternal()) return false; | 6552 if (field_representation().IsExternal()) return false; |
6556 return StoringValueNeedsWriteBarrier(value()) && | 6553 return StoringValueNeedsWriteBarrier(value()) && |
6557 ReceiverObjectNeedsWriteBarrier(object(), value(), | 6554 ReceiverObjectNeedsWriteBarrier(object(), value(), |
6558 new_space_dominator()); | 6555 new_space_dominator()); |
6559 } | 6556 } |
6560 | 6557 |
(...skipping 921 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7482 virtual bool IsDeletable() const V8_OVERRIDE { return true; } | 7479 virtual bool IsDeletable() const V8_OVERRIDE { return true; } |
7483 }; | 7480 }; |
7484 | 7481 |
7485 | 7482 |
7486 #undef DECLARE_INSTRUCTION | 7483 #undef DECLARE_INSTRUCTION |
7487 #undef DECLARE_CONCRETE_INSTRUCTION | 7484 #undef DECLARE_CONCRETE_INSTRUCTION |
7488 | 7485 |
7489 } } // namespace v8::internal | 7486 } } // namespace v8::internal |
7490 | 7487 |
7491 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ | 7488 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ |
OLD | NEW |