Index: src/ia32/ic-ia32.cc |
diff --git a/src/ia32/ic-ia32.cc b/src/ia32/ic-ia32.cc |
index 4106f0108903bde9f0cb9cef50f06bbb671ee3c2..2cee8b11696afe6039cdbd82cf5fdf4993e4b372 100644 |
--- a/src/ia32/ic-ia32.cc |
+++ b/src/ia32/ic-ia32.cc |
@@ -140,14 +140,26 @@ static void GenerateStringDictionaryProbes(MacroAssembler* masm, |
__ lea(r0, Operand(r0, r0, times_2, 0)); // r0 = r0 * 3 |
// Check if the key is identical to the name. |
- __ cmp(name, Operand(elements, r0, times_4, |
+ __ cmp(name, Operand(elements, |
+ r0, |
+ times_4, |
kElementsStartOffset - kHeapObjectTag)); |
- if (i != kProbes - 1) { |
- __ j(equal, done, taken); |
- } else { |
- __ j(not_equal, miss, not_taken); |
- } |
+ __ j(equal, done, taken); |
} |
+ |
+ StringDictionaryLookupStub stub(elements, |
+ r1, |
+ r0, |
+ StringDictionaryLookupStub::POSITIVE_LOOKUP); |
+ __ push(name); |
+ __ mov(r0, FieldOperand(name, String::kHashFieldOffset)); |
+ __ shr(r0, String::kHashShift); |
+ __ push(r0); |
+ __ CallStub(&stub); |
+ |
+ __ test(r1, Operand(r1)); |
+ __ j(zero, miss); |
+ __ jmp(done); |
} |