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.