Avoid repeating code when creating builtins.
InstallBuiltinFunctionIds stood out when looking at code that grew strangely when compiled with default optimizations. This change from repeated code to a loop saves 6-7 KB of machine code. I suspect it's faster but I also suspect it's fast enough either way so that is not really a factor. Machine code reduction seen below. Code formatted with git cl format. clang x64: Total change: -5985 bytes ------------------------------------------- +517 - Source: ?? - (gained 744, lost 227) ------------------------------------------- New symbols: +744: v8::internal::Genesis::InstallBuiltinFunctionIds()::builtins type=d, size=744 bytes Removed symbols: -4: .L.str98 type=r, size=4 bytes ... [stripped 30 similar lines] -19: .L.str100 type=r, size=19 bytes ---------------------------------------------------------------------------------------------- -6502 - Source: /home/bratell/src/chromium/src/v8/src/bootstrapper.cc - (gained 0, lost 6502) ---------------------------------------------------------------------------------------------- Removed symbols: -1135: v8::internal::ResolveBuiltinIdHolder(v8::internal::Handle<v8::internal::Context>, char const*) type=t, size=1135 bytes Shrunk symbols: -5367: v8::internal::Genesis::InstallBuiltinFunctionIds() type=t, (was 7105 bytes, now 1738 bytes) BUG= Review URL: https://codereview.chromium.org/918303005 Cr-Commit-Position: refs/heads/master@{#26919}
This commit is contained in:
parent
f41b6b9919
commit
bd21d72d50
@ -2323,15 +2323,24 @@ static void InstallBuiltinFunctionId(Handle<JSObject> holder,
|
||||
|
||||
void Genesis::InstallBuiltinFunctionIds() {
|
||||
HandleScope scope(isolate());
|
||||
struct BuiltinFunctionIds {
|
||||
const char* holder_expr;
|
||||
const char* fun_name;
|
||||
BuiltinFunctionId id;
|
||||
};
|
||||
|
||||
#define INSTALL_BUILTIN_ID(holder_expr, fun_name, name) \
|
||||
{ \
|
||||
Handle<JSObject> holder = ResolveBuiltinIdHolder( \
|
||||
native_context(), #holder_expr); \
|
||||
BuiltinFunctionId id = k##name; \
|
||||
InstallBuiltinFunctionId(holder, #fun_name, id); \
|
||||
}
|
||||
FUNCTIONS_WITH_ID_LIST(INSTALL_BUILTIN_ID)
|
||||
{ #holder_expr, #fun_name, k##name } \
|
||||
,
|
||||
const BuiltinFunctionIds builtins[] = {
|
||||
FUNCTIONS_WITH_ID_LIST(INSTALL_BUILTIN_ID)};
|
||||
#undef INSTALL_BUILTIN_ID
|
||||
|
||||
for (const BuiltinFunctionIds& builtin : builtins) {
|
||||
Handle<JSObject> holder =
|
||||
ResolveBuiltinIdHolder(native_context(), builtin.holder_expr);
|
||||
InstallBuiltinFunctionId(holder, builtin.fun_name, builtin.id);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user