Alter the second hash used in StoreBuffer::Compact.
authorvegorov@chromium.org <vegorov@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Thu, 5 Jan 2012 09:57:10 +0000 (09:57 +0000)
committervegorov@chromium.org <vegorov@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Thu, 5 Jan 2012 09:57:10 +0000 (09:57 +0000)
hash2 >> (kHashMapLengthLog2 * 2) was always zero because hash2 was masked with (kHashMapLength - 1).

R=erik.corry@gmail.com

Review URL: http://codereview.chromium.org/9085021

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@10336 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/store-buffer.cc

index 3d39057..0f1fed0 100644 (file)
@@ -688,9 +688,9 @@ void StoreBuffer::Compact() {
     int hash1 =
         ((int_addr ^ (int_addr >> kHashSetLengthLog2)) & (kHashSetLength - 1));
     if (hash_set_1_[hash1] == int_addr) continue;
-    int hash2 =
-        ((int_addr - (int_addr >> kHashSetLengthLog2)) & (kHashSetLength - 1));
+    uintptr_t hash2 = (int_addr - (int_addr >> kHashSetLengthLog2));
     hash2 ^= hash2 >> (kHashSetLengthLog2 * 2);
+    hash2 &= (kHashSetLength - 1);
     if (hash_set_2_[hash2] == int_addr) continue;
     if (hash_set_1_[hash1] == 0) {
       hash_set_1_[hash1] = int_addr;