Reviewers: Igor Sheludko,

Message:
PTAL

Description:
Make index translate/inobject only rely on the map.

Please review this at https://chromiumcodereview.appspot.com/65413003/

SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge

Affected files (+27, -25 lines):
  M src/arm/stub-cache-arm.cc
  M src/ia32/stub-cache-ia32.cc
  M src/ic.cc
  M src/property.h
  M src/x64/stub-cache-x64.cc


Index: src/arm/stub-cache-arm.cc
diff --git a/src/arm/stub-cache-arm.cc b/src/arm/stub-cache-arm.cc
index 2e3a0f8a3e4744294be395792901f5eaff001c4d..5099dc086a0923c396bbb86df4406d159075ec8a 100644
--- a/src/arm/stub-cache-arm.cc
+++ b/src/arm/stub-cache-arm.cc
@@ -1372,13 +1372,13 @@ void LoadStubCompiler::GenerateLoadField(Register reg,
                                          Representation representation) {
   if (!reg.is(receiver())) __ mov(receiver(), reg);
   if (kind() == Code::LOAD_IC) {
-    LoadFieldStub stub(field.is_inobject(holder),
-                       field.translate(holder),
+    LoadFieldStub stub(field.is_inobject(holder->map()),
+                       field.translate(holder->map()),
                        representation);
     GenerateTailCall(masm(), stub.GetCode(isolate()));
   } else {
-    KeyedLoadFieldStub stub(field.is_inobject(holder),
-                            field.translate(holder),
+    KeyedLoadFieldStub stub(field.is_inobject(holder->map()),
+                            field.translate(holder->map()),
                             representation);
     GenerateTailCall(masm(), stub.GetCode(isolate()));
   }
@@ -1640,8 +1640,9 @@ Handle<Code> CallStubCompiler::CompileCallField(Handle<JSObject> object,

   // Do the right check and compute the holder register.
Register reg = CheckPrototypes(object, r0, holder, r1, r3, r4, name, &miss);
-  GenerateFastPropertyLoad(masm(), r1, reg, index.is_inobject(holder),
- index.translate(holder), Representation::Tagged());
+  GenerateFastPropertyLoad(
+      masm(), r1, reg, index.is_inobject(holder->map()),
+      index.translate(holder->map()), Representation::Tagged());

   GenerateCallFunction(masm(), object, arguments(), &miss, extra_state_);

Index: src/ia32/stub-cache-ia32.cc
diff --git a/src/ia32/stub-cache-ia32.cc b/src/ia32/stub-cache-ia32.cc
index a3be0a777739e071980b4b57e73138768573f38e..ab33ed5857a53c766f7e77da666243f39f0717fc 100644
--- a/src/ia32/stub-cache-ia32.cc
+++ b/src/ia32/stub-cache-ia32.cc
@@ -1354,13 +1354,13 @@ void LoadStubCompiler::GenerateLoadField(Register reg,
                                          Representation representation) {
   if (!reg.is(receiver())) __ mov(receiver(), reg);
   if (kind() == Code::LOAD_IC) {
-    LoadFieldStub stub(field.is_inobject(holder),
-                       field.translate(holder),
+    LoadFieldStub stub(field.is_inobject(holder->map()),
+                       field.translate(holder->map()),
                        representation);
     GenerateTailCall(masm(), stub.GetCode(isolate()));
   } else {
-    KeyedLoadFieldStub stub(field.is_inobject(holder),
-                            field.translate(holder),
+    KeyedLoadFieldStub stub(field.is_inobject(holder->map()),
+                            field.translate(holder->map()),
                             representation);
     GenerateTailCall(masm(), stub.GetCode(isolate()));
   }
@@ -1644,8 +1644,8 @@ Handle<Code> CallStubCompiler::CompileCallField(Handle<JSObject> object,
                                  name, &miss);

   GenerateFastPropertyLoad(
-      masm(), edi, reg, index.is_inobject(holder),
-      index.translate(holder), Representation::Tagged());
+      masm(), edi, reg, index.is_inobject(holder->map()),
+      index.translate(holder->map()), Representation::Tagged());

   // Check that the function really is a function.
   __ JumpIfSmi(edi, &miss);
Index: src/ic.cc
diff --git a/src/ic.cc b/src/ic.cc
index 9b304057ade037d471539297de6c3c4762d9bc73..5f024b0b5765aad1bcc79628fea04ca13f5e73ca 100644
--- a/src/ic.cc
+++ b/src/ic.cc
@@ -1201,8 +1201,8 @@ Handle<Code> LoadIC::CompileHandler(LookupResult* lookup,
     case FIELD: {
       PropertyIndex field = lookup->GetFieldIndex();
       if (object.is_identical_to(holder)) {
-        return SimpleFieldLoad(field.translate(holder),
-                               field.is_inobject(holder),
+        return SimpleFieldLoad(field.translate(holder->map()),
+                               field.is_inobject(holder->map()),
                                lookup->representation());
       }
       return compiler.CompileLoadField(
Index: src/property.h
diff --git a/src/property.h b/src/property.h
index 0f78ba478ec8512e8d94fd57a502a42a470c582a..229382266073d463ca0ecee800d04b15a5f6d2a1 100644
--- a/src/property.h
+++ b/src/property.h
@@ -150,16 +150,16 @@ class PropertyIndex {
     return value();
   }

-  bool is_inobject(Handle<JSObject> holder) {
+  bool is_inobject(Handle<Map> map) {
     if (is_header_index()) return true;
-    return field_index() < holder->map()->inobject_properties();
+    return field_index() < map->inobject_properties();
   }

-  int translate(Handle<JSObject> holder) {
+  int translate(Handle<Map> map) {
     if (is_header_index()) return header_index();
-    int index = field_index() - holder->map()->inobject_properties();
+    int index = field_index() - map->inobject_properties();
     if (index >= 0) return index;
-    return index + holder->map()->instance_size() / kPointerSize;
+    return index + map->instance_size() / kPointerSize;
   }

  private:
Index: src/x64/stub-cache-x64.cc
diff --git a/src/x64/stub-cache-x64.cc b/src/x64/stub-cache-x64.cc
index a1e8f211161e9c42cbfeffa0f9d9d3eb9818bcae..c41421ea9da26f8a3fd233da4ce6c431c2b06e4e 100644
--- a/src/x64/stub-cache-x64.cc
+++ b/src/x64/stub-cache-x64.cc
@@ -1278,13 +1278,13 @@ void LoadStubCompiler::GenerateLoadField(Register reg,
                                          Representation representation) {
   if (!reg.is(receiver())) __ movq(receiver(), reg);
   if (kind() == Code::LOAD_IC) {
-    LoadFieldStub stub(field.is_inobject(holder),
-                       field.translate(holder),
+    LoadFieldStub stub(field.is_inobject(holder->map()),
+                       field.translate(holder->map()),
                        representation);
     GenerateTailCall(masm(), stub.GetCode(isolate()));
   } else {
-    KeyedLoadFieldStub stub(field.is_inobject(holder),
-                            field.translate(holder),
+    KeyedLoadFieldStub stub(field.is_inobject(holder->map()),
+                            field.translate(holder->map()),
                             representation);
     GenerateTailCall(masm(), stub.GetCode(isolate()));
   }
@@ -1568,8 +1568,9 @@ Handle<Code> CallStubCompiler::CompileCallField(Handle<JSObject> object,
   Register reg = CheckPrototypes(object, rdx, holder, rbx, rax, rdi,
                                  name, &miss);

-  GenerateFastPropertyLoad(masm(), rdi, reg, index.is_inobject(holder),
- index.translate(holder), Representation::Tagged());
+  GenerateFastPropertyLoad(
+      masm(), rdi, reg, index.is_inobject(holder->map()),
+      index.translate(holder->map()), Representation::Tagged());

   // Check that the function really is a function.
   __ JumpIfSmi(rdi, &miss);


--
--
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/groups/opt_out.

Reply via email to