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
This commit is contained in:
parent
e9ca60d265
commit
81281dc5cf
@ -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;
|
Label good;
|
||||||
__ cmp(entity_name, tmp);
|
__ cmp(entity_name, tmp);
|
||||||
__ b(eq, &good);
|
__ b(eq, &good);
|
||||||
|
|
||||||
// Check if the entry name is not a unique name.
|
// Check if the entry name is not a unique name.
|
||||||
__ ldr(entity_name, FieldMemOperand(entity_name, HeapObject::kMapOffset));
|
__ ldr(entity_name, FieldMemOperand(entity_name, HeapObject::kMapOffset));
|
||||||
__ ldrb(entity_name,
|
__ ldrb(entity_name,
|
||||||
FieldMemOperand(entity_name, Map::kInstanceTypeOffset));
|
FieldMemOperand(entity_name, Map::kInstanceTypeOffset));
|
||||||
__ tst(entity_name, Operand(kIsInternalizedMask));
|
__ tst(entity_name, Operand(kIsInternalizedMask));
|
||||||
__ b(ne, &good);
|
__ b(ne, &good);
|
||||||
__ cmp(entity_name, Operand(SYMBOL_TYPE));
|
__ cmp(entity_name, Operand(SYMBOL_TYPE));
|
||||||
__ b(ne, miss);
|
__ b(ne, miss);
|
||||||
|
|
||||||
__ bind(&good);
|
__ bind(&good);
|
||||||
|
|
||||||
// Restore the properties.
|
// Restore the properties.
|
||||||
__ ldr(properties,
|
__ ldr(properties,
|
||||||
FieldMemOperand(receiver, JSObject::kPropertiesOffset));
|
FieldMemOperand(receiver, JSObject::kPropertiesOffset));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const int spill_mask =
|
const int spill_mask =
|
||||||
|
@ -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 =
|
||||||
|
Loading…
Reference in New Issue
Block a user