Revision: 17807
Author: [email protected]
Date: Sat Nov 16 15:22:09 2013 UTC
Log: Correct r17804 to match latest version of uploaded CL
[email protected]
Review URL: https://codereview.chromium.org/73923004
http://code.google.com/p/v8/source/detail?r=17807
Modified:
/branches/bleeding_edge/src/arm/macro-assembler-arm.cc
/branches/bleeding_edge/src/code-stubs-hydrogen.cc
/branches/bleeding_edge/src/ia32/macro-assembler-ia32.cc
/branches/bleeding_edge/src/x64/code-stubs-x64.cc
/branches/bleeding_edge/src/x64/macro-assembler-x64.cc
=======================================
--- /branches/bleeding_edge/src/arm/macro-assembler-arm.cc Fri Nov 15
17:53:35 2013 UTC
+++ /branches/bleeding_edge/src/arm/macro-assembler-arm.cc Sat Nov 16
15:22:09 2013 UTC
@@ -1500,6 +1500,9 @@
}
+// Compute the hash code from the untagged key. This must be kept in sync
with
+// ComputeIntegerHash in utils.h and KeyedLoadGenericElementStub in
+// code-stub-hydrogen.cc
void MacroAssembler::GetNumberHash(Register t0, Register scratch) {
// First of all we assign the hash seed to scratch.
LoadRoot(scratch, Heap::kHashSeedRootIndex);
=======================================
--- /branches/bleeding_edge/src/code-stubs-hydrogen.cc Fri Nov 15 17:53:35
2013 UTC
+++ /branches/bleeding_edge/src/code-stubs-hydrogen.cc Sat Nov 16 15:22:09
2013 UTC
@@ -210,7 +210,7 @@
template <class Stub>
class CodeStubGraphBuilder: public CodeStubGraphBuilderBase {
public:
- explicit CodeStubGraphBuilder(Isolate* isolate, Stub* stub)
+ CodeStubGraphBuilder(Isolate* isolate, Stub* stub)
: CodeStubGraphBuilderBase(isolate, stub) {}
protected:
@@ -1303,133 +1303,14 @@
}
-template <>
-class CodeStubGraphBuilder<KeyedLoadDictionaryElementStub>
- : public CodeStubGraphBuilderBase {
- public:
- explicit CodeStubGraphBuilder(Isolate* isolate,
- KeyedLoadDictionaryElementStub* stub)
- : CodeStubGraphBuilderBase(isolate, stub) {}
-
- protected:
- HValue* BuildCodeStubHelper(HValue* dictionary,
- HValue* key,
- HValue* hash,
- HValue* mask,
- int current_probe);
-
- virtual HValue* BuildCodeStub();
-
- KeyedLoadDictionaryElementStub* casted_stub() {
- return static_cast<KeyedLoadDictionaryElementStub*>(stub());
- }
-};
-
-
-HValue* CodeStubGraphBuilder<KeyedLoadDictionaryElementStub>::
- BuildCodeStubHelper(
- HValue* elements,
- HValue* key,
- HValue* hash,
- HValue* mask,
- int current_probe) {
- if (current_probe == kNumberDictionaryProbes) {
- return NULL;
- }
-
- int32_t offset = SeededNumberDictionary::GetProbeOffset(current_probe);
- HValue* raw_index = (current_probe == 0)
- ? hash
- : Add<HAdd>(hash, Add<HConstant>(offset));
- raw_index = Add<HBitwise>(Token::BIT_AND, raw_index, mask);
- int32_t entry_size = SeededNumberDictionary::kEntrySize;
- raw_index = Add<HMul>(raw_index, Add<HConstant>(entry_size));
- raw_index->ClearFlag(HValue::kCanOverflow);
-
- int32_t base_offset = SeededNumberDictionary::kElementsStartIndex;
- HValue* key_index = Add<HAdd>(raw_index, Add<HConstant>(base_offset));
- key_index->ClearFlag(HValue::kCanOverflow);
-
- HValue* candidate_key = Add<HLoadKeyed>(elements, key_index,
- static_cast<HValue*>(NULL),
- FAST_SMI_ELEMENTS);
-
- IfBuilder key_compare(this);
- key_compare.IfNot<HCompareObjectEqAndBranch>(key, candidate_key);
- key_compare.Then();
- {
- // Key at the current probe doesn't match, try at the next probe.
- HValue* result = BuildCodeStubHelper(elements, key, hash, mask,
- current_probe + 1);
- if (result == NULL) {
- key_compare.Deopt("probes exhausted in keyed load dictionary
lookup");
- result = graph()->GetConstantUndefined();
- } else {
- Push(result);
- }
- }
- key_compare.Else();
- {
- // Key at current probe matches. Details must be zero, otherwise the
- // dictionary element requires special handling.
- HValue* details_index = Add<HAdd>(raw_index,
- Add<HConstant>(base_offset + 2));
- details_index->ClearFlag(HValue::kCanOverflow);
-
- HValue* details = Add<HLoadKeyed>(elements, details_index,
- static_cast<HValue*>(NULL),
- FAST_SMI_ELEMENTS);
- IfBuilder details_compare(this);
- details_compare.If<HCompareNumericAndBranch>(details,
- graph()->GetConstant0(),
- Token::NE);
- details_compare.ThenDeopt("keyed load dictionary element not fast
case");
-
- details_compare.Else();
- {
- // Key matches and details are zero --> fast case. Load and return
the
- // value.
- HValue* result_index = Add<HAdd>(raw_index,
- Add<HConstant>(base_offset + 1));
- result_index->ClearFlag(HValue::kCanOverflow);
-
- Push(Add<HLoadKeyed>(elements, result_index,
- static_cast<HValue*>(NULL),
- FAST_ELEMENTS));
- }
- details_compare.End();
- }
- key_compare.End();
-
- return Pop();
-}
-
-
+template<>
HValue*
CodeStubGraphBuilder<KeyedLoadDictionaryElementStub>::BuildCodeStub() {
- KeyedLoadDictionaryElementStub* stub = casted_stub();
-
- HValue* dictionary = GetParameter(0);
+ HValue* receiver = GetParameter(0);
HValue* key = GetParameter(1);
- USE(stub);
- USE(dictionary);
-
- HValue* elements = AddLoadElements(dictionary);
Add<HCheckSmi>(key);
- HValue* hash = BuildElementIndexHash(key);
-
- HValue* capacity = Add<HLoadKeyed>(
- elements,
- Add<HConstant>(NameDictionary::kCapacityIndex),
- static_cast<HValue*>(NULL),
- FAST_SMI_ELEMENTS);
-
- HValue* mask = Add<HSub>(capacity, graph()->GetConstant1());
- mask->ChangeRepresentation(Representation::Integer32());
- mask->ClearFlag(HValue::kCanOverflow);
-
- return BuildCodeStubHelper(elements, key, hash, mask, 0);
+ return BuildUncheckedDictionaryElementLoad(receiver, key);
}
=======================================
--- /branches/bleeding_edge/src/ia32/macro-assembler-ia32.cc Fri Nov 15
17:53:35 2013 UTC
+++ /branches/bleeding_edge/src/ia32/macro-assembler-ia32.cc Sat Nov 16
15:22:09 2013 UTC
@@ -1412,8 +1412,9 @@
}
-// Compute the hash code from the untagged key. This must be kept in sync
-// with ComputeIntegerHash in utils.h.
+// Compute the hash code from the untagged key. This must be kept in sync
with
+// ComputeIntegerHash in utils.h and KeyedLoadGenericElementStub in
+// code-stub-hydrogen.cc
//
// Note: r0 will contain hash code
void MacroAssembler::GetNumberHash(Register r0, Register scratch) {
=======================================
--- /branches/bleeding_edge/src/x64/code-stubs-x64.cc Fri Nov 15 17:53:35
2013 UTC
+++ /branches/bleeding_edge/src/x64/code-stubs-x64.cc Sat Nov 16 15:22:09
2013 UTC
@@ -117,7 +117,7 @@
void KeyedLoadDictionaryElementStub::InitializeInterfaceDescriptor(
Isolate* isolate,
CodeStubInterfaceDescriptor* descriptor) {
- static Register registers[] = { rdx, rcx };
+ static Register registers[] = { rdx, rax };
descriptor->register_param_count_ = 2;
descriptor->register_params_ = registers;
descriptor->deoptimization_handler_ =
=======================================
--- /branches/bleeding_edge/src/x64/macro-assembler-x64.cc Fri Nov 15
17:53:35 2013 UTC
+++ /branches/bleeding_edge/src/x64/macro-assembler-x64.cc Sat Nov 16
15:22:09 2013 UTC
@@ -3906,6 +3906,9 @@
}
+// Compute the hash code from the untagged key. This must be kept in sync
with
+// ComputeIntegerHash in utils.h and KeyedLoadGenericElementStub in
+// code-stub-hydrogen.cc
void MacroAssembler::GetNumberHash(Register r0, Register scratch) {
// First of all we assign the hash seed to scratch.
LoadRoot(scratch, Heap::kHashSeedRootIndex);
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.