Index: src/x64/stub-cache-x64.cc |
diff --git a/src/x64/stub-cache-x64.cc b/src/x64/stub-cache-x64.cc |
index 2a0c3675f204b66307f69171764017c4d5543201..579ede542d34cc4e0c7354a110a288025438a726 100644 |
--- a/src/x64/stub-cache-x64.cc |
+++ b/src/x64/stub-cache-x64.cc |
@@ -107,38 +107,34 @@ static void ProbeTable(Isolate* isolate, |
} |
-// Helper function used to check that the dictionary doesn't contain |
-// the property. This function may return false negatives, so miss_label |
-// must always call a backup property check that is complete. |
-// This function is safe to call if the receiver has fast properties. |
-// Name must be unique and receiver must be a heap object. |
-static void GenerateDictionaryNegativeLookup(MacroAssembler* masm, |
- Label* miss_label, |
- Register receiver, |
- Handle<Name> name, |
- Register r0, |
- Register r1) { |
+void StubCompiler::GenerateDictionaryNegativeLookup(MacroAssembler* masm, |
+ Label* miss_label, |
+ Register receiver, |
+ Handle<Name> name, |
+ Register scratch0, |
+ Register scratch1) { |
ASSERT(name->IsUniqueName()); |
+ ASSERT(!receiver.is(scratch0)); |
Counters* counters = masm->isolate()->counters(); |
__ IncrementCounter(counters->negative_lookups(), 1); |
__ IncrementCounter(counters->negative_lookups_miss(), 1); |
- __ movq(r0, FieldOperand(receiver, HeapObject::kMapOffset)); |
+ __ movq(scratch0, FieldOperand(receiver, HeapObject::kMapOffset)); |
const int kInterceptorOrAccessCheckNeededMask = |
(1 << Map::kHasNamedInterceptor) | (1 << Map::kIsAccessCheckNeeded); |
// Bail out if the receiver has a named interceptor or requires access checks. |
- __ testb(FieldOperand(r0, Map::kBitFieldOffset), |
+ __ testb(FieldOperand(scratch0, Map::kBitFieldOffset), |
Immediate(kInterceptorOrAccessCheckNeededMask)); |
__ j(not_zero, miss_label); |
// Check that receiver is a JSObject. |
- __ CmpInstanceType(r0, FIRST_SPEC_OBJECT_TYPE); |
+ __ CmpInstanceType(scratch0, FIRST_SPEC_OBJECT_TYPE); |
__ j(below, miss_label); |
// Load properties array. |
- Register properties = r0; |
+ Register properties = scratch0; |
__ movq(properties, FieldOperand(receiver, JSObject::kPropertiesOffset)); |
// Check that the properties array is a dictionary. |
@@ -152,7 +148,7 @@ static void GenerateDictionaryNegativeLookup(MacroAssembler* masm, |
&done, |
properties, |
name, |
- r1); |
+ scratch1); |
__ bind(&done); |
__ DecrementCounter(counters->negative_lookups_miss(), 1); |
} |
@@ -777,14 +773,11 @@ void StoreStubCompiler::GenerateRestoreName(MacroAssembler* masm, |
} |
-// Generate code to check that a global property cell is empty. Create |
-// the property cell at compilation time if no cell exists for the |
-// property. |
-static void GenerateCheckPropertyCell(MacroAssembler* masm, |
- Handle<GlobalObject> global, |
- Handle<Name> name, |
- Register scratch, |
- Label* miss) { |
+void StubCompiler::GenerateCheckPropertyCell(MacroAssembler* masm, |
+ Handle<GlobalObject> global, |
+ Handle<Name> name, |
+ Register scratch, |
+ Label* miss) { |
Handle<PropertyCell> cell = |
GlobalObject::EnsurePropertyCell(global, name); |
ASSERT(cell->value()->IsTheHole()); |
@@ -1054,14 +1047,12 @@ void StoreStubCompiler::GenerateStoreField(MacroAssembler* masm, |
} |
-// Calls GenerateCheckPropertyCell for each global object in the prototype chain |
-// from object to (but not including) holder. |
-static void GenerateCheckPropertyCells(MacroAssembler* masm, |
- Handle<JSObject> object, |
- Handle<JSObject> holder, |
- Handle<Name> name, |
- Register scratch, |
- Label* miss) { |
+void StubCompiler::GenerateCheckPropertyCells(MacroAssembler* masm, |
+ Handle<JSObject> object, |
+ Handle<JSObject> holder, |
+ Handle<Name> name, |
+ Register scratch, |
+ Label* miss) { |
Handle<JSObject> current = object; |
while (!current.is_identical_to(holder)) { |
if (current->IsGlobalObject()) { |
@@ -1282,30 +1273,10 @@ Register LoadStubCompiler::CallbackHandlerFrontend( |
} |
-void LoadStubCompiler::NonexistentHandlerFrontend( |
- Handle<JSObject> object, |
- Handle<JSObject> last, |
- Handle<Name> name, |
- Label* success, |
- Handle<GlobalObject> global) { |
- Label miss; |
- |
- HandlerFrontendHeader(object, receiver(), last, name, &miss); |
- |
- // If the last object in the prototype chain is a global object, |
- // check that the global property cell is empty. |
- if (!global.is_null()) { |
- GenerateCheckPropertyCell(masm(), global, name, scratch2(), &miss); |
- } |
- |
- HandlerFrontendFooter(name, success, &miss); |
-} |
- |
- |
void LoadStubCompiler::GenerateLoadField(Register reg, |
- Handle<JSObject> holder, |
- PropertyIndex field, |
- Representation representation) { |
+ Handle<JSObject> holder, |
+ PropertyIndex field, |
+ Representation representation) { |
if (!reg.is(receiver())) __ movq(receiver(), reg); |
if (kind() == Code::LOAD_IC) { |
LoadFieldStub stub(field.is_inobject(holder), |