From 81281dc5cf49e827052a6e518b5de81379ad311c Mon Sep 17 00:00:00 2001 From: "ulan@chromium.org" Date: Tue, 26 Mar 2013 09:28:26 +0000 Subject: [PATCH] ARM: fix dictionary negative lookup. Do not skip the last inlined probe. BUG=171975 Review URL: https://chromiumcodereview.appspot.com/12703014 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@14074 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/arm/code-stubs-arm.cc | 48 ++++++++++++++++++++++----------------------- src/mips/code-stubs-mips.cc | 40 ++++++++++++++++++------------------- 2 files changed, 42 insertions(+), 46 deletions(-) diff --git a/src/arm/code-stubs-arm.cc b/src/arm/code-stubs-arm.cc index d5db837..1304b0e 100644 --- a/src/arm/code-stubs-arm.cc +++ b/src/arm/code-stubs-arm.cc @@ -7414,33 +7414,31 @@ void NameDictionaryLookupStub::GenerateNegativeLookup(MacroAssembler* masm, __ cmp(entity_name, tmp); __ b(eq, done); - if (i != kInlinedProbes - 1) { - // Load the hole ready for use below: - __ LoadRoot(tmp, Heap::kTheHoleValueRootIndex); + // Load the hole ready for use below: + __ LoadRoot(tmp, Heap::kTheHoleValueRootIndex); - // Stop if found the property. - __ cmp(entity_name, Operand(Handle(name))); - __ b(eq, miss); - - Label good; - __ cmp(entity_name, tmp); - __ b(eq, &good); + // Stop if found the property. + __ cmp(entity_name, Operand(Handle(name))); + __ b(eq, miss); - // Check if the entry name is not a unique name. - __ ldr(entity_name, FieldMemOperand(entity_name, HeapObject::kMapOffset)); - __ ldrb(entity_name, - FieldMemOperand(entity_name, Map::kInstanceTypeOffset)); - __ tst(entity_name, Operand(kIsInternalizedMask)); - __ b(ne, &good); - __ cmp(entity_name, Operand(SYMBOL_TYPE)); - __ b(ne, miss); - - __ bind(&good); - - // Restore the properties. - __ ldr(properties, - FieldMemOperand(receiver, JSObject::kPropertiesOffset)); - } + Label good; + __ cmp(entity_name, tmp); + __ b(eq, &good); + + // Check if the entry name is not a unique name. + __ ldr(entity_name, FieldMemOperand(entity_name, HeapObject::kMapOffset)); + __ ldrb(entity_name, + FieldMemOperand(entity_name, Map::kInstanceTypeOffset)); + __ tst(entity_name, Operand(kIsInternalizedMask)); + __ b(ne, &good); + __ cmp(entity_name, Operand(SYMBOL_TYPE)); + __ b(ne, miss); + + __ bind(&good); + + // Restore the properties. + __ ldr(properties, + FieldMemOperand(receiver, JSObject::kPropertiesOffset)); } const int spill_mask = diff --git a/src/mips/code-stubs-mips.cc b/src/mips/code-stubs-mips.cc index 8faa29c..70c0419 100644 --- a/src/mips/code-stubs-mips.cc +++ b/src/mips/code-stubs-mips.cc @@ -7549,30 +7549,28 @@ void NameDictionaryLookupStub::GenerateNegativeLookup(MacroAssembler* masm, __ LoadRoot(tmp, Heap::kUndefinedValueRootIndex); __ Branch(done, eq, entity_name, Operand(tmp)); - if (i != kInlinedProbes - 1) { - // Load the hole ready for use below: - __ LoadRoot(tmp, Heap::kTheHoleValueRootIndex); + // Load the hole ready for use below: + __ LoadRoot(tmp, Heap::kTheHoleValueRootIndex); - // Stop if found the property. - __ Branch(miss, eq, entity_name, Operand(Handle(name))); + // Stop if found the property. + __ Branch(miss, eq, entity_name, Operand(Handle(name))); - Label good; - __ Branch(&good, eq, entity_name, Operand(tmp)); + Label good; + __ Branch(&good, eq, entity_name, Operand(tmp)); - // Check if the entry name is not a unique name. - __ lw(entity_name, FieldMemOperand(entity_name, HeapObject::kMapOffset)); - __ lbu(entity_name, - FieldMemOperand(entity_name, Map::kInstanceTypeOffset)); - __ And(scratch0, entity_name, Operand(kIsInternalizedMask)); - __ Branch(&good, ne, scratch0, Operand(zero_reg)); - __ Branch(miss, ne, entity_name, Operand(SYMBOL_TYPE)); - - __ bind(&good); - - // Restore the properties. - __ lw(properties, - FieldMemOperand(receiver, JSObject::kPropertiesOffset)); - } + // Check if the entry name is not a unique name. + __ lw(entity_name, FieldMemOperand(entity_name, HeapObject::kMapOffset)); + __ lbu(entity_name, + FieldMemOperand(entity_name, Map::kInstanceTypeOffset)); + __ And(scratch0, entity_name, Operand(kIsInternalizedMask)); + __ Branch(&good, ne, scratch0, Operand(zero_reg)); + __ Branch(miss, ne, entity_name, Operand(SYMBOL_TYPE)); + + __ bind(&good); + + // Restore the properties. + __ lw(properties, + FieldMemOperand(receiver, JSObject::kPropertiesOffset)); } const int spill_mask = -- 2.7.4