Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(60)

Unified Diff: src/builtins.cc

Issue 11428137: ARM: Make use of d16-d31 when available. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Get the feature detection right Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/builtins.cc
diff --git a/src/builtins.cc b/src/builtins.cc
index 97fcaebff5875553bc19e1aa33cd54bf3a61beea..fc7ea0fbd3bb7206843f4bfe52eb22f0a9b16223 100644
--- a/src/builtins.cc
+++ b/src/builtins.cc
@@ -1772,6 +1772,7 @@ struct BuiltinDesc {
int name;
Code::Flags flags;
BuiltinExtraArguments extra_args;
+ bool in_snapshot; // whether this builtin should be included in snapshot.
};
#define BUILTIN_FUNCTION_TABLE_INIT { V8_ONCE_INIT, {} }
@@ -1804,6 +1805,7 @@ void Builtins::InitBuiltinFunctionTable() {
functions[builtin_count].name = builtin_count;
functions[builtin_count].flags = static_cast<Code::Flags>(0);
functions[builtin_count].extra_args = NO_EXTRA_ARGUMENTS;
+ functions[builtin_count].in_snapshot = false;
#define DEF_FUNCTION_PTR_C(aname, aextra_args) \
functions->generator = FUNCTION_ADDR(Generate_Adaptor); \
@@ -1812,9 +1814,10 @@ void Builtins::InitBuiltinFunctionTable() {
functions->name = c_##aname; \
functions->flags = Code::ComputeFlags(Code::BUILTIN); \
functions->extra_args = aextra_args; \
+ functions->in_snapshot = true; \
++functions;
-#define DEF_FUNCTION_PTR_A(aname, kind, state, extra) \
+#define DEF_FUNCTION_PTR_A(aname, kind, state, extra, in_snapshot_arg) \
functions->generator = FUNCTION_ADDR(Generate_##aname); \
functions->c_code = NULL; \
functions->s_name = #aname; \
@@ -1823,6 +1826,7 @@ void Builtins::InitBuiltinFunctionTable() {
state, \
extra); \
functions->extra_args = NO_EXTRA_ARGUMENTS; \
+ functions->in_snapshot = (in_snapshot_arg == IN_SNAPSHOT); \
++functions;
BUILTIN_LIST_C(DEF_FUNCTION_PTR_C)
@@ -1833,8 +1837,8 @@ void Builtins::InitBuiltinFunctionTable() {
#undef DEF_FUNCTION_PTR_A
}
-void Builtins::SetUp(bool create_heap_objects) {
- ASSERT(!initialized_);
+void Builtins::SetUp(bool create_heap_objects, bool after_serialization) {
+ ASSERT(!initialized_ || after_serialization);
Isolate* isolate = Isolate::Current();
Heap* heap = isolate->heap();
@@ -1851,7 +1855,18 @@ void Builtins::SetUp(bool create_heap_objects) {
// Traverse the list of builtins and generate an adaptor in a
// separate code object for each one.
for (int i = 0; i < builtin_count; i++) {
- if (create_heap_objects) {
+ if (after_serialization && functions[i].in_snapshot) {
+ // This builtin has already been generated.
+ continue;
+ }
+
+ if (create_heap_objects ||
+ (after_serialization && !functions[i].in_snapshot)) {
+ if (!after_serialization && !functions[i].in_snapshot) {
+ // This builtin should not be included in the snapshot.
+ continue;
+ }
+
MacroAssembler masm(isolate, u.buffer, sizeof u.buffer);
// Generate the code/adaptor.
typedef void (*Generator)(MacroAssembler*, int, BuiltinExtraArguments);
@@ -1935,11 +1950,11 @@ Handle<Code> Builtins::name() { \
reinterpret_cast<Code**>(builtin_address(k##name)); \
return Handle<Code>(code_address); \
}
-#define DEFINE_BUILTIN_ACCESSOR_A(name, kind, state, extra) \
-Handle<Code> Builtins::name() { \
- Code** code_address = \
- reinterpret_cast<Code**>(builtin_address(k##name)); \
- return Handle<Code>(code_address); \
+#define DEFINE_BUILTIN_ACCESSOR_A(name, kind, state, extra, extra2) \
+Handle<Code> Builtins::name() { \
+ Code** code_address = \
+ reinterpret_cast<Code**>(builtin_address(k##name)); \
+ return Handle<Code>(code_address); \
}
BUILTIN_LIST_C(DEFINE_BUILTIN_ACCESSOR_C)
BUILTIN_LIST_A(DEFINE_BUILTIN_ACCESSOR_A)

Powered by Google App Engine
This is Rietveld 408576698