Revision: 8253
Author: [email protected]
Date: Fri Jun 10 00:49:49 2011
Log: Refactor platform-specific code for determining shared stub for
keyed load/stores.
[email protected]
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/7044083
http://code.google.com/p/v8/source/detail?r=8253
Modified:
/branches/bleeding_edge/src/arm/stub-cache-arm.cc
/branches/bleeding_edge/src/ia32/stub-cache-ia32.cc
/branches/bleeding_edge/src/stub-cache.cc
/branches/bleeding_edge/src/stub-cache.h
/branches/bleeding_edge/src/x64/stub-cache-x64.cc
=======================================
--- /branches/bleeding_edge/src/arm/stub-cache-arm.cc Thu Jun 9 08:19:37
2011
+++ /branches/bleeding_edge/src/arm/stub-cache-arm.cc Fri Jun 10 00:49:49
2011
@@ -3121,15 +3121,8 @@
// -- r0 : key
// -- r1 : receiver
// -----------------------------------
- MaybeObject* maybe_stub;
- if (receiver_map->has_fast_elements()) {
- maybe_stub = KeyedLoadFastElementStub().TryGetCode();
- } else {
- ASSERT(receiver_map->has_external_array_elements());
- JSObject::ElementsKind elements_kind = receiver_map->elements_kind();
- maybe_stub = KeyedLoadExternalArrayStub(elements_kind).TryGetCode();
- }
Code* stub;
+ MaybeObject* maybe_stub =
ComputeSharedKeyedLoadElementStub(receiver_map);
if (!maybe_stub->To(&stub)) return maybe_stub;
__ DispatchMap(r1,
r2,
@@ -3213,8 +3206,7 @@
}
-MaybeObject* KeyedStoreStubCompiler::CompileStoreElement(
- Map* receiver_map) {
+MaybeObject* KeyedStoreStubCompiler::CompileStoreElement(Map*
receiver_map) {
// ----------- S t a t e -------------
// -- r0 : value
// -- r1 : key
@@ -3222,16 +3214,8 @@
// -- lr : return address
// -- r3 : scratch
// -----------------------------------
- MaybeObject* maybe_stub;
- if (receiver_map->has_fast_elements()) {
- bool is_js_array = receiver_map->instance_type() == JS_ARRAY_TYPE;
- maybe_stub = KeyedStoreFastElementStub(is_js_array).TryGetCode();
- } else {
- ASSERT(receiver_map->has_external_array_elements());
- JSObject::ElementsKind elements_kind = receiver_map->elements_kind();
- maybe_stub = KeyedStoreExternalArrayStub(elements_kind).TryGetCode();
- }
Code* stub;
+ MaybeObject* maybe_stub =
ComputeSharedKeyedStoreElementStub(receiver_map);
if (!maybe_stub->To(&stub)) return maybe_stub;
__ DispatchMap(r2,
r3,
=======================================
--- /branches/bleeding_edge/src/ia32/stub-cache-ia32.cc Thu Jun 9 08:19:37
2011
+++ /branches/bleeding_edge/src/ia32/stub-cache-ia32.cc Fri Jun 10 00:49:49
2011
@@ -2699,24 +2699,15 @@
}
-MaybeObject* KeyedStoreStubCompiler::CompileStoreElement(
- Map* receiver_map) {
+MaybeObject* KeyedStoreStubCompiler::CompileStoreElement(Map*
receiver_map) {
// ----------- S t a t e -------------
// -- eax : value
// -- ecx : key
// -- edx : receiver
// -- esp[0] : return address
// -----------------------------------
- MaybeObject* maybe_stub;
- if (receiver_map->has_fast_elements()) {
- bool is_js_array = receiver_map->instance_type() == JS_ARRAY_TYPE;
- maybe_stub = KeyedStoreFastElementStub(is_js_array).TryGetCode();
- } else {
- ASSERT(receiver_map->has_external_array_elements());
- JSObject::ElementsKind elements_kind = receiver_map->elements_kind();
- maybe_stub = KeyedStoreExternalArrayStub(elements_kind).TryGetCode();
- }
Code* stub;
+ MaybeObject* maybe_stub =
ComputeSharedKeyedStoreElementStub(receiver_map);
if (!maybe_stub->To(&stub)) return maybe_stub;
__ DispatchMap(edx,
Handle<Map>(receiver_map),
@@ -3175,15 +3166,8 @@
// -- edx : receiver
// -- esp[0] : return address
// -----------------------------------
- MaybeObject* maybe_stub;
- if (receiver_map->has_fast_elements()) {
- maybe_stub = KeyedLoadFastElementStub().TryGetCode();
- } else {
- ASSERT(receiver_map->has_external_array_elements());
- JSObject::ElementsKind elements_kind = receiver_map->elements_kind();
- maybe_stub = KeyedLoadExternalArrayStub(elements_kind).TryGetCode();
- }
Code* stub;
+ MaybeObject* maybe_stub =
ComputeSharedKeyedLoadElementStub(receiver_map);
if (!maybe_stub->To(&stub)) return maybe_stub;
__ DispatchMap(edx,
Handle<Map>(receiver_map),
=======================================
--- /branches/bleeding_edge/src/stub-cache.cc Thu Jun 9 08:19:37 2011
+++ /branches/bleeding_edge/src/stub-cache.cc Fri Jun 10 00:49:49 2011
@@ -29,6 +29,7 @@
#include "api.h"
#include "arguments.h"
+#include "code-stubs.h"
#include "gdb-jit.h"
#include "ic-inl.h"
#include "stub-cache.h"
@@ -502,12 +503,13 @@
if (!maybe_code->IsUndefined()) return Code::cast(maybe_code);
MaybeObject* maybe_new_code = NULL;
+ Map* receiver_map = receiver->map();
if (is_store) {
KeyedStoreStubCompiler compiler(strict_mode);
- maybe_new_code = compiler.CompileStoreElement(receiver->map());
+ maybe_new_code = compiler.CompileStoreElement(receiver_map);
} else {
KeyedLoadStubCompiler compiler;
- maybe_new_code = compiler.CompileLoadElement(receiver->map());
+ maybe_new_code = compiler.CompileLoadElement(receiver_map);
}
Code* code;
if (!maybe_new_code->To(&code)) return maybe_new_code;
@@ -1643,6 +1645,21 @@
}
return result;
}
+
+
+MaybeObject* KeyedLoadStubCompiler::ComputeSharedKeyedLoadElementStub(
+ Map* receiver_map) {
+ MaybeObject* maybe_stub = NULL;
+ if (receiver_map->has_fast_elements()) {
+ maybe_stub = KeyedLoadFastElementStub().TryGetCode();
+ } else if (receiver_map->has_external_array_elements()) {
+ JSObject::ElementsKind elements_kind = receiver_map->elements_kind();
+ maybe_stub = KeyedLoadExternalArrayStub(elements_kind).TryGetCode();
+ } else {
+ UNREACHABLE();
+ }
+ return maybe_stub;
+}
MaybeObject* StoreStubCompiler::GetCode(PropertyType type, String* name) {
@@ -1679,6 +1696,22 @@
}
return result;
}
+
+
+MaybeObject* KeyedStoreStubCompiler::ComputeSharedKeyedStoreElementStub(
+ Map* receiver_map) {
+ MaybeObject* maybe_stub = NULL;
+ if (receiver_map->has_fast_elements()) {
+ bool is_js_array = receiver_map->instance_type() == JS_ARRAY_TYPE;
+ maybe_stub = KeyedStoreFastElementStub(is_js_array).TryGetCode();
+ } else if (receiver_map->has_external_array_elements()) {
+ JSObject::ElementsKind elements_kind = receiver_map->elements_kind();
+ maybe_stub = KeyedStoreExternalArrayStub(elements_kind).TryGetCode();
+ } else {
+ UNREACHABLE();
+ }
+ return maybe_stub;
+}
CallStubCompiler::CallStubCompiler(int argc,
=======================================
--- /branches/bleeding_edge/src/stub-cache.h Thu Jun 9 08:19:37 2011
+++ /branches/bleeding_edge/src/stub-cache.h Fri Jun 10 00:49:49 2011
@@ -661,6 +661,8 @@
MaybeObject* GetCode(PropertyType type,
String* name,
InlineCacheState state = MONOMORPHIC);
+
+ MaybeObject* ComputeSharedKeyedLoadElementStub(Map* receiver_map);
};
@@ -718,6 +720,8 @@
String* name,
InlineCacheState state = MONOMORPHIC);
+ MaybeObject* ComputeSharedKeyedStoreElementStub(Map* receiver_map);
+
StrictModeFlag strict_mode_;
};
=======================================
--- /branches/bleeding_edge/src/x64/stub-cache-x64.cc Thu Jun 9 08:19:37
2011
+++ /branches/bleeding_edge/src/x64/stub-cache-x64.cc Fri Jun 10 00:49:49
2011
@@ -2530,24 +2530,15 @@
}
-MaybeObject* KeyedStoreStubCompiler::CompileStoreElement(
- Map* receiver_map) {
+MaybeObject* KeyedStoreStubCompiler::CompileStoreElement(Map*
receiver_map) {
// ----------- S t a t e -------------
// -- rax : value
// -- rcx : key
// -- rdx : receiver
// -- rsp[0] : return address
// -----------------------------------
- MaybeObject* maybe_stub;
- if (receiver_map->has_fast_elements()) {
- bool is_js_array = receiver_map->instance_type() == JS_ARRAY_TYPE;
- maybe_stub = KeyedStoreFastElementStub(is_js_array).TryGetCode();
- } else {
- ASSERT(receiver_map->has_external_array_elements());
- JSObject::ElementsKind elements_kind = receiver_map->elements_kind();
- maybe_stub = KeyedStoreExternalArrayStub(elements_kind).TryGetCode();
- }
Code* stub;
+ MaybeObject* maybe_stub =
ComputeSharedKeyedStoreElementStub(receiver_map);
if (!maybe_stub->To(&stub)) return maybe_stub;
__ DispatchMap(rdx,
Handle<Map>(receiver_map),
@@ -3002,15 +2993,8 @@
// -- rdx : receiver
// -- rsp[0] : return address
// -----------------------------------
- MaybeObject* maybe_stub;
- if (receiver_map->has_fast_elements()) {
- maybe_stub = KeyedLoadFastElementStub().TryGetCode();
- } else {
- ASSERT(receiver_map->has_external_array_elements());
- JSObject::ElementsKind elements_kind = receiver_map->elements_kind();
- maybe_stub = KeyedLoadExternalArrayStub(elements_kind).TryGetCode();
- }
Code* stub;
+ MaybeObject* maybe_stub =
ComputeSharedKeyedLoadElementStub(receiver_map);
if (!maybe_stub->To(&stub)) return maybe_stub;
__ DispatchMap(rdx,
Handle<Map>(receiver_map),
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev