OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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/hydrogen.h" | 5 #include "src/hydrogen.h" |
6 | 6 |
7 #include <sstream> | 7 #include <sstream> |
8 | 8 |
9 #include "src/v8.h" | 9 #include "src/v8.h" |
10 | 10 |
(...skipping 1733 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1744 | 1744 |
1745 IfBuilder found_key_match(this, &found_key_match_continuation); | 1745 IfBuilder found_key_match(this, &found_key_match_continuation); |
1746 found_key_match.Then(); | 1746 found_key_match.Then(); |
1747 // Key at current probe matches. Relevant bits in the |details| field must | 1747 // Key at current probe matches. Relevant bits in the |details| field must |
1748 // be zero, otherwise the dictionary element requires special handling. | 1748 // be zero, otherwise the dictionary element requires special handling. |
1749 HValue* details_index = | 1749 HValue* details_index = |
1750 AddUncasted<HAdd>(base_index, Add<HConstant>(start_offset + 2)); | 1750 AddUncasted<HAdd>(base_index, Add<HConstant>(start_offset + 2)); |
1751 details_index->ClearFlag(HValue::kCanOverflow); | 1751 details_index->ClearFlag(HValue::kCanOverflow); |
1752 HValue* details = | 1752 HValue* details = |
1753 Add<HLoadKeyed>(elements, details_index, nullptr, FAST_ELEMENTS); | 1753 Add<HLoadKeyed>(elements, details_index, nullptr, FAST_ELEMENTS); |
1754 int details_mask = PropertyDetails::TypeField::kMask | | 1754 int details_mask = PropertyDetails::TypeField::kMask; |
1755 PropertyDetails::DeletedField::kMask; | |
1756 details = AddUncasted<HBitwise>(Token::BIT_AND, details, | 1755 details = AddUncasted<HBitwise>(Token::BIT_AND, details, |
1757 Add<HConstant>(details_mask)); | 1756 Add<HConstant>(details_mask)); |
1758 IfBuilder details_compare(this); | 1757 IfBuilder details_compare(this); |
1759 details_compare.If<HCompareNumericAndBranch>( | 1758 details_compare.If<HCompareNumericAndBranch>( |
1760 details, graph()->GetConstant0(), Token::EQ); | 1759 details, graph()->GetConstant0(), Token::EQ); |
1761 details_compare.Then(); | 1760 details_compare.Then(); |
1762 HValue* result_index = | 1761 HValue* result_index = |
1763 AddUncasted<HAdd>(base_index, Add<HConstant>(start_offset + 1)); | 1762 AddUncasted<HAdd>(base_index, Add<HConstant>(start_offset + 1)); |
1764 result_index->ClearFlag(HValue::kCanOverflow); | 1763 result_index->ClearFlag(HValue::kCanOverflow); |
1765 Push(Add<HLoadKeyed>(elements, result_index, nullptr, FAST_ELEMENTS)); | 1764 Push(Add<HLoadKeyed>(elements, result_index, nullptr, FAST_ELEMENTS)); |
(...skipping 11614 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13380 if (ShouldProduceTraceOutput()) { | 13379 if (ShouldProduceTraceOutput()) { |
13381 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); | 13380 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); |
13382 } | 13381 } |
13383 | 13382 |
13384 #ifdef DEBUG | 13383 #ifdef DEBUG |
13385 graph_->Verify(false); // No full verify. | 13384 graph_->Verify(false); // No full verify. |
13386 #endif | 13385 #endif |
13387 } | 13386 } |
13388 | 13387 |
13389 } } // namespace v8::internal | 13388 } } // namespace v8::internal |
OLD | NEW |