Index: src/runtime.h |
=================================================================== |
--- src/runtime.h (revision 5450) |
+++ src/runtime.h (working copy) |
@@ -1,4 +1,4 @@ |
-// Copyright 2006-2008 the V8 project authors. All rights reserved. |
+// Copyright 2010 the V8 project authors. All rights reserved. |
// Redistribution and use in source and binary forms, with or without |
// modification, are permitted provided that the following conditions are |
// met: |
@@ -389,6 +389,59 @@ |
RUNTIME_FUNCTION_LIST_PROFILER_SUPPORT(F) |
// ---------------------------------------------------------------------------- |
+// INLINE_FUNCTION_LIST defines all inlined functions accessed |
+// with a native call of the form %_name from within JS code. |
+// Entries have the form F(name, number of arguments, number of return values). |
+#define INLINE_FUNCTION_LIST(F) \ |
+ F(IsSmi, 1, 1) \ |
+ F(IsNonNegativeSmi, 1, 1) \ |
+ F(IsArray, 1, 1) \ |
+ F(IsRegExp, 1, 1) \ |
+ F(CallFunction, -1 /* receiver + n args + function */, 1) \ |
+ F(ArgumentsLength, 0, 1) \ |
+ F(Arguments, 1, 1) \ |
+ F(ValueOf, 1, 1) \ |
+ F(SetValueOf, 2, 1) \ |
+ F(StringCharFromCode, 1, 1) \ |
+ F(StringCharAt, 2, 1) \ |
+ F(ObjectEquals, 2, 1) \ |
+ F(RandomHeapNumber, 0, 1) \ |
+ F(IsObject, 1, 1) \ |
+ F(IsFunction, 1, 1) \ |
+ F(IsUndetectableObject, 1, 1) \ |
+ F(IsSpecObject, 1, 1) \ |
+ F(IsStringWrapperSafeForDefaultValueOf, 1, 1) \ |
+ F(MathPow, 2, 1) \ |
+ F(MathSin, 1, 1) \ |
+ F(MathCos, 1, 1) \ |
+ F(MathSqrt, 1, 1) \ |
+ F(IsRegExpEquivalent, 2, 1) \ |
+ F(HasCachedArrayIndex, 1, 1) \ |
+ F(GetCachedArrayIndex, 1, 1) |
+ |
+ |
+// ---------------------------------------------------------------------------- |
+// INLINE_AND_RUNTIME_FUNCTION_LIST defines all inlined functions accessed |
+// with a native call of the form %_name from within JS code that also have |
+ // a corresponding runtime function, that is called for slow cases. |
+// Entries have the form F(name, number of arguments, number of return values). |
+#define INLINE_RUNTIME_FUNCTION_LIST(F) \ |
+ F(IsConstructCall, 0, 1) \ |
+ F(ClassOf, 1, 1) \ |
+ F(StringCharCodeAt, 2, 1) \ |
+ F(Log, 3, 1) \ |
+ F(StringAdd, 2, 1) \ |
+ F(SubString, 3, 1) \ |
+ F(StringCompare, 2, 1) \ |
+ F(RegExpExec, 4, 1) \ |
+ F(RegExpConstructResult, 3, 1) \ |
+ F(RegExpCloneResult, 1, 1) \ |
+ F(GetFromCache, 2, 1) \ |
+ F(NumberToString, 1, 1) \ |
+ F(SwapElements, 3, 1) |
+ |
+ |
+//--------------------------------------------------------------------------- |
// Runtime provides access to all C++ runtime functions. |
class Runtime : public AllStatic { |
@@ -396,33 +449,52 @@ |
enum FunctionId { |
#define F(name, nargs, ressize) k##name, |
RUNTIME_FUNCTION_LIST(F) |
- kNofFunctions |
#undef F |
+#define F(name, nargs, ressize) kInline##name, |
+ INLINE_FUNCTION_LIST(F) |
+ INLINE_RUNTIME_FUNCTION_LIST(F) |
+#undef F |
+ kNumFunctions, |
+ kFirstInlineFunction = kInlineIsSmi |
}; |
- // Runtime function descriptor. |
+ enum IntrinsicType { |
+ RUNTIME, |
+ INLINE |
+ }; |
+ |
+ // Intrinsic function descriptor. |
struct Function { |
+ FunctionId function_id; |
+ IntrinsicType intrinsic_type; |
// The JS name of the function. |
const char* name; |
- // The C++ (native) entry point. |
+ // The C++ (native) entry point. NULL if the function is inlined. |
byte* entry; |
- // The number of arguments expected; nargs < 0 if variable no. of |
- // arguments. |
+ // The number of arguments expected. nargs is -1 if the function takes |
+ // a variable number of arguments. |
int nargs; |
- int stub_id; |
- // Size of result, if complex (larger than a single pointer), |
- // otherwise zero. |
+ // Size of result. Most functions return a single pointer, size 1. |
int result_size; |
}; |
- // Get the runtime function with the given function id. |
- static Function* FunctionForId(FunctionId fid); |
+ static const int kNotFound = -1; |
- // Get the runtime function with the given name. |
- static Function* FunctionForName(Vector<const char> name); |
+ // Add symbols for all the intrinsic function names to a StringDictionary. |
+ // Returns failure if an allocation fails. In this case, it must be |
+ // retried with a new, empty StringDictionary, not with the same one. |
+ // Alternatively, heap initialization can be completely restarted. |
+ static Object* InitializeIntrinsicFunctionNames(Object* dictionary); |
+ // Get the intrinsic function with the given name, which must be a symbol. |
+ static Function* FunctionForSymbol(Handle<String> name); |
+ |
+ // Get the intrinsic function with the given FunctionId. |
+ static Function* FunctionForId(FunctionId id); |
+ |
+ // General-purpose helper functions for runtime system. |
static int StringMatch(Handle<String> sub, Handle<String> pat, int index); |
static bool IsUpperCaseChar(uint16_t ch); |