Reviewers: danno, Paul Lind, palfia, kisg, dusmil,

Description:
MIPS: Revert 21720: "Introduce FieldIndex to unify and abstract property/field
offset"

Port r21732 (48d2cc6)

Original commit message:
Due to assorted failures

BUG=

Please review this at https://codereview.chromium.org/326923002/

SVN Base: https://github.com/v8/v8.git@gbl

Affected files (+27, -12 lines):
  M src/mips/stub-cache-mips.cc


Index: src/mips/stub-cache-mips.cc
diff --git a/src/mips/stub-cache-mips.cc b/src/mips/stub-cache-mips.cc
index 3b663821240629e589309c7cdf08192a2bdd0ca4..66b4124cde4649a50086472401a9571f076d8b4d 100644
--- a/src/mips/stub-cache-mips.cc
+++ b/src/mips/stub-cache-mips.cc
@@ -561,7 +561,12 @@ void StoreStubCompiler::GenerateStoreField(MacroAssembler* masm,
   // checks.
   ASSERT(object->IsJSGlobalProxy() || !object->IsAccessCheckNeeded());

-  FieldIndex index = lookup->GetFieldIndex();
+  int index = lookup->GetFieldIndex().field_index();
+
+  // Adjust for the number of properties stored in the object. Even in the
+ // face of a transition we can use the old map here because the size of the
+  // object and the number of in-object properties is not going to change.
+  index -= object->map()->inobject_properties();

   Representation representation = lookup->representation();
   ASSERT(!representation.IsNone());
@@ -589,12 +594,14 @@ void StoreStubCompiler::GenerateStoreField(MacroAssembler* masm,
     }
   } else if (representation.IsDouble()) {
     // Load the double storage.
-    if (index.is_inobject()) {
-      __ lw(scratch1, FieldMemOperand(receiver_reg, index.offset()));
+    if (index < 0) {
+      int offset = object->map()->instance_size() + (index * kPointerSize);
+      __ lw(scratch1, FieldMemOperand(receiver_reg, offset));
     } else {
       __ lw(scratch1,
             FieldMemOperand(receiver_reg, JSObject::kPropertiesOffset));
-      __ lw(scratch1, FieldMemOperand(scratch1, index.offset()));
+      int offset = index * kPointerSize + FixedArray::kHeaderSize;
+      __ lw(scratch1, FieldMemOperand(scratch1, offset));
     }

     // Store the value into the storage.
@@ -622,9 +629,10 @@ void StoreStubCompiler::GenerateStoreField(MacroAssembler* masm,
   // TODO(verwaest): Share this code as a code stub.
   SmiCheck smi_check = representation.IsTagged()
       ? INLINE_SMI_CHECK : OMIT_SMI_CHECK;
-  if (index.is_inobject()) {
+  if (index < 0) {
     // Set the property straight into the object.
-    __ sw(value_reg, FieldMemOperand(receiver_reg, index.offset()));
+    int offset = object->map()->instance_size() + (index * kPointerSize);
+    __ sw(value_reg, FieldMemOperand(receiver_reg, offset));

     if (!representation.IsSmi()) {
       // Skip updating write barrier if storing a smi.
@@ -634,7 +642,7 @@ void StoreStubCompiler::GenerateStoreField(MacroAssembler* masm,
       // Pass the now unused name_reg as a scratch register.
       __ mov(name_reg, value_reg);
       __ RecordWriteField(receiver_reg,
-                          index.offset(),
+                          offset,
                           name_reg,
                           scratch1,
                           kRAHasNotBeenSaved,
@@ -644,10 +652,11 @@ void StoreStubCompiler::GenerateStoreField(MacroAssembler* masm,
     }
   } else {
     // Write to the properties array.
+    int offset = index * kPointerSize + FixedArray::kHeaderSize;
     // Get the properties array.
     __ lw(scratch1,
           FieldMemOperand(receiver_reg, JSObject::kPropertiesOffset));
-    __ sw(value_reg, FieldMemOperand(scratch1, index.offset()));
+    __ sw(value_reg, FieldMemOperand(scratch1, offset));

     if (!representation.IsSmi()) {
       // Skip updating write barrier if storing a smi.
@@ -657,7 +666,7 @@ void StoreStubCompiler::GenerateStoreField(MacroAssembler* masm,
       // Ok to clobber receiver_reg and name_reg, since we return.
       __ mov(name_reg, value_reg);
       __ RecordWriteField(scratch1,
-                          index.offset(),
+                          offset,
                           name_reg,
                           receiver_reg,
                           kRAHasNotBeenSaved,
@@ -988,14 +997,20 @@ Register LoadStubCompiler::CallbackHandlerFrontend(

 void LoadStubCompiler::GenerateLoadField(Register reg,
                                          Handle<JSObject> holder,
-                                         FieldIndex field,
+                                         PropertyIndex field,
                                          Representation representation) {
   if (!reg.is(receiver())) __ mov(receiver(), reg);
   if (kind() == Code::LOAD_IC) {
-    LoadFieldStub stub(isolate(), field);
+    LoadFieldStub stub(isolate(),
+                       field.is_inobject(holder),
+                       field.translate(holder),
+                       representation);
     GenerateTailCall(masm(), stub.GetCode());
   } else {
-    KeyedLoadFieldStub stub(isolate(), field);
+    KeyedLoadFieldStub stub(isolate(),
+                            field.is_inobject(holder),
+                            field.translate(holder),
+                            representation);
     GenerateTailCall(masm(), stub.GetCode());
   }
 }


--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to