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