Commit 81281dc5 authored by ulan@chromium.org's avatar ulan@chromium.org

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
parent e9ca60d2
...@@ -7414,33 +7414,31 @@ void NameDictionaryLookupStub::GenerateNegativeLookup(MacroAssembler* masm, ...@@ -7414,33 +7414,31 @@ void NameDictionaryLookupStub::GenerateNegativeLookup(MacroAssembler* masm,
__ cmp(entity_name, tmp); __ cmp(entity_name, tmp);
__ b(eq, done); __ b(eq, done);
if (i != kInlinedProbes - 1) { // Load the hole ready for use below:
// Load the hole ready for use below: __ LoadRoot(tmp, Heap::kTheHoleValueRootIndex);
__ LoadRoot(tmp, Heap::kTheHoleValueRootIndex);
// Stop if found the property. // Stop if found the property.
__ cmp(entity_name, Operand(Handle<Name>(name))); __ cmp(entity_name, Operand(Handle<Name>(name)));
__ b(eq, miss); __ b(eq, miss);
Label good;
__ cmp(entity_name, tmp);
__ b(eq, &good);
// Check if the entry name is not a unique name. Label good;
__ ldr(entity_name, FieldMemOperand(entity_name, HeapObject::kMapOffset)); __ cmp(entity_name, tmp);
__ ldrb(entity_name, __ b(eq, &good);
FieldMemOperand(entity_name, Map::kInstanceTypeOffset));
__ tst(entity_name, Operand(kIsInternalizedMask)); // Check if the entry name is not a unique name.
__ b(ne, &good); __ ldr(entity_name, FieldMemOperand(entity_name, HeapObject::kMapOffset));
__ cmp(entity_name, Operand(SYMBOL_TYPE)); __ ldrb(entity_name,
__ b(ne, miss); FieldMemOperand(entity_name, Map::kInstanceTypeOffset));
__ tst(entity_name, Operand(kIsInternalizedMask));
__ bind(&good); __ b(ne, &good);
__ cmp(entity_name, Operand(SYMBOL_TYPE));
// Restore the properties. __ b(ne, miss);
__ ldr(properties,
FieldMemOperand(receiver, JSObject::kPropertiesOffset)); __ bind(&good);
}
// Restore the properties.
__ ldr(properties,
FieldMemOperand(receiver, JSObject::kPropertiesOffset));
} }
const int spill_mask = const int spill_mask =
......
...@@ -7549,30 +7549,28 @@ void NameDictionaryLookupStub::GenerateNegativeLookup(MacroAssembler* masm, ...@@ -7549,30 +7549,28 @@ void NameDictionaryLookupStub::GenerateNegativeLookup(MacroAssembler* masm,
__ LoadRoot(tmp, Heap::kUndefinedValueRootIndex); __ LoadRoot(tmp, Heap::kUndefinedValueRootIndex);
__ Branch(done, eq, entity_name, Operand(tmp)); __ Branch(done, eq, entity_name, Operand(tmp));
if (i != kInlinedProbes - 1) { // Load the hole ready for use below:
// Load the hole ready for use below: __ LoadRoot(tmp, Heap::kTheHoleValueRootIndex);
__ LoadRoot(tmp, Heap::kTheHoleValueRootIndex);
// Stop if found the property. // Stop if found the property.
__ Branch(miss, eq, entity_name, Operand(Handle<Name>(name))); __ Branch(miss, eq, entity_name, Operand(Handle<Name>(name)));
Label good; Label good;
__ Branch(&good, eq, entity_name, Operand(tmp)); __ Branch(&good, eq, entity_name, Operand(tmp));
// Check if the entry name is not a unique name. // Check if the entry name is not a unique name.
__ lw(entity_name, FieldMemOperand(entity_name, HeapObject::kMapOffset)); __ lw(entity_name, FieldMemOperand(entity_name, HeapObject::kMapOffset));
__ lbu(entity_name, __ lbu(entity_name,
FieldMemOperand(entity_name, Map::kInstanceTypeOffset)); FieldMemOperand(entity_name, Map::kInstanceTypeOffset));
__ And(scratch0, entity_name, Operand(kIsInternalizedMask)); __ And(scratch0, entity_name, Operand(kIsInternalizedMask));
__ Branch(&good, ne, scratch0, Operand(zero_reg)); __ Branch(&good, ne, scratch0, Operand(zero_reg));
__ Branch(miss, ne, entity_name, Operand(SYMBOL_TYPE)); __ Branch(miss, ne, entity_name, Operand(SYMBOL_TYPE));
__ bind(&good); __ bind(&good);
// Restore the properties. // Restore the properties.
__ lw(properties, __ lw(properties,
FieldMemOperand(receiver, JSObject::kPropertiesOffset)); FieldMemOperand(receiver, JSObject::kPropertiesOffset));
}
} }
const int spill_mask = const int spill_mask =
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment