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.

Reply via email to