| Index: src/codegen.cc
|
| ===================================================================
|
| --- src/codegen.cc (revision 4085)
|
| +++ src/codegen.cc (working copy)
|
| @@ -351,42 +351,18 @@
|
| }
|
|
|
|
|
| +// List of special runtime calls which are generated inline. For some of these
|
| +// functions the code will be generated inline, and for others a call to a code
|
| +// stub will be inlined.
|
|
|
| -// Special cases: These 'runtime calls' manipulate the current
|
| -// frame and are only used 1 or two places, so we generate them
|
| -// inline instead of generating calls to them. They are used
|
| -// for implementing Function.prototype.call() and
|
| -// Function.prototype.apply().
|
| +#define INLINE_RUNTIME_ENTRY(Name, argc, ressize) \
|
| + {&CodeGenerator::Generate##Name, "_" #Name, argc}, \
|
| +
|
| CodeGenerator::InlineRuntimeLUT CodeGenerator::kInlineRuntimeLUT[] = {
|
| - {&CodeGenerator::GenerateIsSmi, "_IsSmi"},
|
| - {&CodeGenerator::GenerateIsNonNegativeSmi, "_IsNonNegativeSmi"},
|
| - {&CodeGenerator::GenerateIsArray, "_IsArray"},
|
| - {&CodeGenerator::GenerateIsRegExp, "_IsRegExp"},
|
| - {&CodeGenerator::GenerateIsConstructCall, "_IsConstructCall"},
|
| - {&CodeGenerator::GenerateArgumentsLength, "_ArgumentsLength"},
|
| - {&CodeGenerator::GenerateArgumentsAccess, "_Arguments"},
|
| - {&CodeGenerator::GenerateClassOf, "_ClassOf"},
|
| - {&CodeGenerator::GenerateValueOf, "_ValueOf"},
|
| - {&CodeGenerator::GenerateSetValueOf, "_SetValueOf"},
|
| - {&CodeGenerator::GenerateFastCharCodeAt, "_FastCharCodeAt"},
|
| - {&CodeGenerator::GenerateCharFromCode, "_CharFromCode"},
|
| - {&CodeGenerator::GenerateObjectEquals, "_ObjectEquals"},
|
| - {&CodeGenerator::GenerateLog, "_Log"},
|
| - {&CodeGenerator::GenerateRandomPositiveSmi, "_RandomPositiveSmi"},
|
| - {&CodeGenerator::GenerateIsObject, "_IsObject"},
|
| - {&CodeGenerator::GenerateIsFunction, "_IsFunction"},
|
| - {&CodeGenerator::GenerateIsUndetectableObject, "_IsUndetectableObject"},
|
| - {&CodeGenerator::GenerateStringAdd, "_StringAdd"},
|
| - {&CodeGenerator::GenerateSubString, "_SubString"},
|
| - {&CodeGenerator::GenerateStringCompare, "_StringCompare"},
|
| - {&CodeGenerator::GenerateRegExpExec, "_RegExpExec"},
|
| - {&CodeGenerator::GenerateNumberToString, "_NumberToString"},
|
| - {&CodeGenerator::GenerateMathPow, "_Math_pow"},
|
| - {&CodeGenerator::GenerateMathSin, "_Math_sin"},
|
| - {&CodeGenerator::GenerateMathCos, "_Math_cos"},
|
| - {&CodeGenerator::GenerateMathSqrt, "_Math_sqrt"},
|
| + INLINE_RUNTIME_FUNCTION_LIST(INLINE_RUNTIME_ENTRY)
|
| };
|
|
|
| +#undef INLINE_RUNTIME_ENTRY
|
|
|
| CodeGenerator::InlineRuntimeLUT* CodeGenerator::FindInlineRuntimeLUT(
|
| Handle<String> name) {
|
| @@ -431,6 +407,14 @@
|
| }
|
|
|
|
|
| +int CodeGenerator::InlineRuntimeCallArgumentsCount(Handle<String> name) {
|
| + CodeGenerator::InlineRuntimeLUT* f =
|
| + CodeGenerator::FindInlineRuntimeLUT(name);
|
| + if (f != NULL) return f->nargs;
|
| + return -1;
|
| +}
|
| +
|
| +
|
| // Simple condition analysis. ALWAYS_TRUE and ALWAYS_FALSE represent a
|
| // known result for the test expression, with no side effects.
|
| CodeGenerator::ConditionAnalysis CodeGenerator::AnalyzeCondition(
|
|
|