Revision: 10362
Author:   [email protected]
Date:     Tue Jan 10 04:01:04 2012
Log:      Fix zero hash handling on ARM.
Some cleanup.
Review URL: http://codereview.chromium.org/9169010
http://code.google.com/p/v8/source/detail?r=10362

Modified:
 /branches/bleeding_edge/src/arm/code-stubs-arm.cc
 /branches/bleeding_edge/src/ia32/code-stubs-ia32.cc
 /branches/bleeding_edge/src/mips/code-stubs-mips.cc
 /branches/bleeding_edge/src/objects.cc
 /branches/bleeding_edge/src/objects.h
 /branches/bleeding_edge/src/x64/code-stubs-x64.cc

=======================================
--- /branches/bleeding_edge/src/arm/code-stubs-arm.cc Wed Jan 4 07:12:15 2012 +++ /branches/bleeding_edge/src/arm/code-stubs-arm.cc Tue Jan 10 04:01:04 2012
@@ -5759,13 +5759,12 @@
   // hash ^= hash >> 11;
   __ eor(hash, hash, Operand(hash, LSR, 11));
   // hash += hash << 15;
-  __ add(hash, hash, Operand(hash, LSL, 15), SetCC);
-
-  uint32_t kHashShiftCutOffMask = (1 << (32 - String::kHashShift)) - 1;
-  __ and_(hash, hash, Operand(kHashShiftCutOffMask));
+  __ add(hash, hash, Operand(hash, LSL, 15));
+
+  __ and_(hash, hash, Operand(String::kHashBitMask), SetCC);

   // if (hash == 0) hash = 27;
-  __ mov(hash, Operand(27), LeaveCC, eq);
+  __ mov(hash, Operand(StringHasher::kZeroHash), LeaveCC, eq);
 }


=======================================
--- /branches/bleeding_edge/src/ia32/code-stubs-ia32.cc Wed Jan 4 07:12:15 2012 +++ /branches/bleeding_edge/src/ia32/code-stubs-ia32.cc Tue Jan 10 04:01:04 2012
@@ -6091,14 +6091,12 @@
   __ shl(scratch, 15);
   __ add(hash, scratch);

-  uint32_t kHashShiftCutOffMask = (1 << (32 - String::kHashShift)) - 1;
-  __ and_(hash, kHashShiftCutOffMask);
+  __ and_(hash, String::kHashBitMask);

   // if (hash == 0) hash = 27;
   Label hash_not_zero;
-  __ test(hash, hash);
   __ j(not_zero, &hash_not_zero, Label::kNear);
-  __ mov(hash, Immediate(27));
+  __ mov(hash, Immediate(StringHasher::kZeroHash));
   __ bind(&hash_not_zero);
 }

=======================================
--- /branches/bleeding_edge/src/mips/code-stubs-mips.cc Wed Jan 4 07:12:15 2012 +++ /branches/bleeding_edge/src/mips/code-stubs-mips.cc Tue Jan 10 04:01:04 2012
@@ -5954,7 +5954,7 @@


 void StringHelper::GenerateHashGetHash(MacroAssembler* masm,
-                                         Register hash) {
+                                       Register hash) {
   // hash += hash << 3;
   __ sll(at, hash, 3);
   __ addu(hash, hash, at);
@@ -5965,12 +5965,11 @@
   __ sll(at, hash, 15);
   __ addu(hash, hash, at);

-  uint32_t kHashShiftCutOffMask = (1 << (32 - String::kHashShift)) - 1;
-  __ li(at, Operand(kHashShiftCutOffMask));
+  __ li(at, Operand(String::kHashBitMask));
   __ and_(hash, hash, at);

   // if (hash == 0) hash = 27;
-  __ ori(at, zero_reg, 27);
+  __ ori(at, zero_reg, StringHasher::kZeroHash);
   __ movz(hash, at, hash);
 }

=======================================
--- /branches/bleeding_edge/src/objects.cc      Mon Jan  9 08:37:47 2012
+++ /branches/bleeding_edge/src/objects.cc      Tue Jan 10 04:01:04 2012
@@ -11577,7 +11577,7 @@
     hash += hash << 3;
     hash ^= hash >> 11;
     hash += hash << 15;
-    if ((hash & String::kHashBitMask) == 0) hash = 27;
+    if ((hash & String::kHashBitMask) == 0) hash = String::kZeroHash;
 #ifdef DEBUG
     StringHasher hasher(2, seed);
     hasher.AddCharacter(c1);
=======================================
--- /branches/bleeding_edge/src/objects.h       Mon Jan  9 08:37:47 2012
+++ /branches/bleeding_edge/src/objects.h       Tue Jan 10 04:01:04 2012
@@ -6210,6 +6210,11 @@
   // value is represented decimal value.
   static uint32_t MakeArrayIndexHash(uint32_t value, int length);

+  // No string is allowed to have a hash of zero.  That value is reserved
+  // for internal properties.  If the hash calculation yields zero then we
+  // use 27 instead.
+  static const int kZeroHash = 27;
+
  private:
   uint32_t array_index() {
     ASSERT(is_array_index());
=======================================
--- /branches/bleeding_edge/src/x64/code-stubs-x64.cc Wed Jan 4 07:12:15 2012 +++ /branches/bleeding_edge/src/x64/code-stubs-x64.cc Tue Jan 10 04:01:04 2012
@@ -5003,13 +5003,12 @@
   __ shll(scratch, Immediate(15));
   __ addl(hash, scratch);

-  uint32_t kHashShiftCutOffMask = (1 << (32 - String::kHashShift)) - 1;
-  __ andl(hash, Immediate(kHashShiftCutOffMask));
+  __ andl(hash, Immediate(String::kHashBitMask));

   // if (hash == 0) hash = 27;
   Label hash_not_zero;
   __ j(not_zero, &hash_not_zero);
-  __ Set(hash, 27);
+  __ Set(hash, StringHasher::kZeroHash);
   __ bind(&hash_not_zero);
 }

--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to