| Index: src/heap.cc
|
| ===================================================================
|
| --- src/heap.cc (revision 3516)
|
| +++ src/heap.cc (working copy)
|
| @@ -1577,7 +1577,6 @@
|
| CreateFixedStubs();
|
|
|
| // Allocate the number->string conversion cache
|
| - ASSERT(IsPowerOf2(kNumberStringCacheSize));
|
| obj = AllocateFixedArray(kNumberStringCacheSize * 2);
|
| if (obj->IsFailure()) return false;
|
| set_number_string_cache(FixedArray::cast(obj));
|
| @@ -1611,29 +1610,25 @@
|
| }
|
|
|
|
|
| -static inline int NumberStringTruncateHash(int value) {
|
| - return (((value >> 16) ^ value)) & (Heap::kNumberStringCacheSize - 1);
|
| -}
|
| -
|
| -
|
| -static inline int DoubleGetHash(double d) {
|
| +static inline int double_get_hash(double d) {
|
| DoubleRepresentation rep(d);
|
| - int value = (static_cast<int>(rep.bits) ^ static_cast<int>(rep.bits >> 32));
|
| - return NumberStringTruncateHash(value);
|
| + return ((static_cast<int>(rep.bits) ^ static_cast<int>(rep.bits >> 32)) &
|
| + (Heap::kNumberStringCacheSize - 1));
|
| }
|
|
|
|
|
| -static inline int SmiGetHash(Smi* smi) {
|
| - return NumberStringTruncateHash(smi->value());
|
| +static inline int smi_get_hash(Smi* smi) {
|
| + return (smi->value() & (Heap::kNumberStringCacheSize - 1));
|
| }
|
|
|
|
|
| +
|
| Object* Heap::GetNumberStringCache(Object* number) {
|
| int hash;
|
| if (number->IsSmi()) {
|
| - hash = SmiGetHash(Smi::cast(number));
|
| + hash = smi_get_hash(Smi::cast(number));
|
| } else {
|
| - hash = DoubleGetHash(number->Number());
|
| + hash = double_get_hash(number->Number());
|
| }
|
| Object* key = number_string_cache()->get(hash * 2);
|
| if (key == number) {
|
| @@ -1650,10 +1645,10 @@
|
| void Heap::SetNumberStringCache(Object* number, String* string) {
|
| int hash;
|
| if (number->IsSmi()) {
|
| - hash = SmiGetHash(Smi::cast(number));
|
| + hash = smi_get_hash(Smi::cast(number));
|
| number_string_cache()->set(hash * 2, number, SKIP_WRITE_BARRIER);
|
| } else {
|
| - hash = DoubleGetHash(number->Number());
|
| + hash = double_get_hash(number->Number());
|
| number_string_cache()->set(hash * 2, number);
|
| }
|
| number_string_cache()->set(hash * 2 + 1, string);
|
|
|