kill builtins.tbl (479888, r=jorendorff).

This commit is contained in:
nnethercote@mozilla.com 2009-05-05 17:36:26 -07:00
Родитель 99885c3531
Коммит d2bca72b4d
8 изменённых файлов: 108 добавлений и 66 удалений

Просмотреть файл

@ -214,7 +214,6 @@ ifdef ENABLE_JIT
VPATH += $(srcdir)/nanojit
INSTALLED_HEADERS += \
builtins.tbl \
jsbuiltins.h \
Assembler.h \
LIR.h \

Просмотреть файл

@ -252,10 +252,6 @@ OTHER_HFILES = \
jskeyword.tbl \
$(NULL)
ifdef ENABLE_JIT
OTHER_HFILES += builtins.tbl
endif
ifndef PREBUILT_CPUCFG
OTHER_HFILES += $(OBJDIR)/jsautocfg.h
endif

Просмотреть файл

@ -930,6 +930,7 @@ js_Array_dense_setelem(JSContext* cx, JSObject* obj, jsint i, jsval v)
obj->dslots[u] = v;
return JS_TRUE;
}
JS_DEFINE_CALLINFO_4(extern, BOOL, js_Array_dense_setelem, CONTEXT, OBJECT, INT32, JSVAL, 0, 0)
#endif
static JSBool
@ -2314,6 +2315,7 @@ js_ArrayCompPush(JSContext *cx, JSObject *obj, jsval v)
obj->dslots[length] = v;
return JS_TRUE;
}
JS_DEFINE_CALLINFO_3(extern, BOOL, js_ArrayCompPush, CONTEXT, OBJECT, JSVAL, 0, 0)
#ifdef JS_TRACER
static jsval FASTCALL
@ -3271,6 +3273,7 @@ js_NewEmptyArray(JSContext* cx, JSObject* proto)
obj->dslots = NULL;
return obj;
}
JS_DEFINE_CALLINFO_2(extern, OBJECT, js_NewEmptyArray, CONTEXT, OBJECT, 0, 0)
JSObject* FASTCALL
js_NewUninitializedArray(JSContext* cx, JSObject* proto, uint32 len)
@ -3284,6 +3287,7 @@ js_NewUninitializedArray(JSContext* cx, JSObject* proto, uint32 len)
return NULL;
return obj;
}
JS_DEFINE_CALLINFO_3(extern, OBJECT, js_NewUninitializedArray, CONTEXT, OBJECT, UINT32, 0, 0)
#endif /* JS_TRACER */
@ -3561,7 +3565,3 @@ js_ArrayToJSDoubleBuffer(JSContext *cx, JSObject *obj, jsuint offset, jsuint cou
return JS_TRUE;
}
JS_DEFINE_CALLINFO_4(extern, BOOL, js_Array_dense_setelem, CONTEXT, OBJECT, INT32, JSVAL, 0, 0)
JS_DEFINE_CALLINFO_2(extern, OBJECT, js_NewEmptyArray, CONTEXT, OBJECT, 0, 0)
JS_DEFINE_CALLINFO_3(extern, OBJECT, js_NewUninitializedArray, CONTEXT, OBJECT, UINT32, 0, 0)
JS_DEFINE_CALLINFO_3(extern, BOOL, js_ArrayCompPush, CONTEXT, OBJECT, JSVAL, 0, 0)

Просмотреть файл

@ -93,6 +93,7 @@ js_dmod(jsdouble a, jsdouble b)
r = fmod(a, b);
return r;
}
JS_DEFINE_CALLINFO_2(extern, DOUBLE, js_dmod, DOUBLE, DOUBLE, 1, 1)
int32 FASTCALL
js_imod(int32 a, int32 b)
@ -102,6 +103,7 @@ js_imod(int32 a, int32 b)
int r = a % b;
return r;
}
JS_DEFINE_CALLINFO_2(extern, INT32, js_imod, INT32, INT32, 1, 1)
/* The following boxing/unboxing primitives we can't emit inline because
they either interact with the GC and depend on Spidermonkey's 32-bit
@ -119,6 +121,7 @@ js_BoxDouble(JSContext* cx, jsdouble d)
return JSVAL_ERROR_COOKIE;
return v;
}
JS_DEFINE_CALLINFO_2(extern, JSVAL, js_BoxDouble, CONTEXT, DOUBLE, 1, 1)
jsval FASTCALL
js_BoxInt32(JSContext* cx, int32 i)
@ -132,6 +135,7 @@ js_BoxInt32(JSContext* cx, int32 i)
return JSVAL_ERROR_COOKIE;
return v;
}
JS_DEFINE_CALLINFO_2(extern, JSVAL, js_BoxInt32, CONTEXT, INT32, 1, 1)
jsdouble FASTCALL
js_UnboxDouble(jsval v)
@ -140,6 +144,7 @@ js_UnboxDouble(jsval v)
return (jsdouble)JSVAL_TO_INT(v);
return *JSVAL_TO_DOUBLE(v);
}
JS_DEFINE_CALLINFO_1(extern, DOUBLE, js_UnboxDouble, JSVAL, 1, 1)
int32 FASTCALL
js_UnboxInt32(jsval v)
@ -148,18 +153,21 @@ js_UnboxInt32(jsval v)
return JSVAL_TO_INT(v);
return js_DoubleToECMAInt32(*JSVAL_TO_DOUBLE(v));
}
JS_DEFINE_CALLINFO_1(extern, INT32, js_UnboxInt32, JSVAL, 1, 1)
int32 FASTCALL
js_DoubleToInt32(jsdouble d)
{
return js_DoubleToECMAInt32(d);
}
JS_DEFINE_CALLINFO_1(extern, INT32, js_DoubleToInt32, DOUBLE, 1, 1)
uint32 FASTCALL
js_DoubleToUint32(jsdouble d)
{
return js_DoubleToECMAUint32(d);
}
JS_DEFINE_CALLINFO_1(extern, UINT32, js_DoubleToUint32, DOUBLE, 1, 1)
jsdouble FASTCALL
js_StringToNumber(JSContext* cx, JSString* str)
@ -178,6 +186,7 @@ js_StringToNumber(JSContext* cx, JSString* str)
}
return d;
}
JS_DEFINE_CALLINFO_2(extern, DOUBLE, js_StringToNumber, CONTEXT, STRING, 1, 1)
int32 FASTCALL
js_StringToInt32(JSContext* cx, JSString* str)
@ -192,6 +201,7 @@ js_StringToInt32(JSContext* cx, JSString* str)
return 0;
return js_DoubleToECMAInt32(d);
}
JS_DEFINE_CALLINFO_2(extern, INT32, js_StringToInt32, CONTEXT, STRING, 1, 1)
SideExit* FASTCALL
js_CallTree(InterpState* state, Fragment* f)
@ -227,6 +237,7 @@ js_CallTree(InterpState* state, Fragment* f)
return lr;
}
JS_DEFINE_CALLINFO_2(extern, SIDEEXIT, js_CallTree, INTERPSTATE, FRAGMENT, 0, 0)
JSBool FASTCALL
js_AddProperty(JSContext* cx, JSObject* obj, JSScopeProperty* sprop)
@ -286,6 +297,7 @@ js_AddProperty(JSContext* cx, JSObject* obj, JSScopeProperty* sprop)
JS_UNLOCK_SCOPE(cx, scope);
return JS_FALSE;
}
JS_DEFINE_CALLINFO_3(extern, BOOL, js_AddProperty, CONTEXT, OBJECT, SCOPEPROP, 0, 0)
static JSBool
HasProperty(JSContext* cx, JSObject* obj, jsid id)
@ -317,6 +329,7 @@ js_HasNamedProperty(JSContext* cx, JSObject* obj, JSString* idstr)
return HasProperty(cx, obj, id);
}
JS_DEFINE_CALLINFO_3(extern, BOOL, js_HasNamedProperty, CONTEXT, OBJECT, STRING, 0, 0)
JSBool FASTCALL
js_HasNamedPropertyInt32(JSContext* cx, JSObject* obj, int32 index)
@ -327,6 +340,7 @@ js_HasNamedPropertyInt32(JSContext* cx, JSObject* obj, int32 index)
return HasProperty(cx, obj, id);
}
JS_DEFINE_CALLINFO_3(extern, BOOL, js_HasNamedPropertyInt32, CONTEXT, OBJECT, INT32, 0, 0)
jsval FASTCALL
js_CallGetter(JSContext* cx, JSObject* obj, JSScopeProperty* sprop)
@ -337,6 +351,7 @@ js_CallGetter(JSContext* cx, JSObject* obj, JSScopeProperty* sprop)
return JSVAL_ERROR_COOKIE;
return v;
}
JS_DEFINE_CALLINFO_3(extern, JSVAL, js_CallGetter, CONTEXT, OBJECT, SCOPEPROP, 0, 0)
JSString* FASTCALL
js_TypeOfObject(JSContext* cx, JSObject* obj)
@ -344,6 +359,7 @@ js_TypeOfObject(JSContext* cx, JSObject* obj)
JSType type = JS_TypeOfValue(cx, OBJECT_TO_JSVAL(obj));
return ATOM_TO_STRING(cx->runtime->atomState.typeAtoms[type]);
}
JS_DEFINE_CALLINFO_2(extern, STRING, js_TypeOfObject, CONTEXT, OBJECT, 1, 1)
JSString* FASTCALL
js_TypeOfBoolean(JSContext* cx, int32 unboxed)
@ -354,6 +370,7 @@ js_TypeOfBoolean(JSContext* cx, int32 unboxed)
JSType type = JS_TypeOfValue(cx, boxed);
return ATOM_TO_STRING(cx->runtime->atomState.typeAtoms[type]);
}
JS_DEFINE_CALLINFO_2(extern, STRING, js_TypeOfBoolean, CONTEXT, INT32, 1, 1)
jsdouble FASTCALL
js_BooleanOrUndefinedToNumber(JSContext* cx, int32 unboxed)
@ -363,6 +380,7 @@ js_BooleanOrUndefinedToNumber(JSContext* cx, int32 unboxed)
JS_ASSERT(unboxed == JS_TRUE || unboxed == JS_FALSE);
return unboxed;
}
JS_DEFINE_CALLINFO_2(extern, DOUBLE, js_BooleanOrUndefinedToNumber, CONTEXT, INT32, 1, 1)
JSString* FASTCALL
js_BooleanOrUndefinedToString(JSContext *cx, int32 unboxed)
@ -370,12 +388,14 @@ js_BooleanOrUndefinedToString(JSContext *cx, int32 unboxed)
JS_ASSERT(uint32(unboxed) <= 2);
return ATOM_TO_STRING(cx->runtime->atomState.booleanAtoms[unboxed]);
}
JS_DEFINE_CALLINFO_2(extern, STRING, js_BooleanOrUndefinedToString, CONTEXT, INT32, 1, 1)
JSObject* FASTCALL
js_Arguments(JSContext* cx)
{
return NULL;
}
JS_DEFINE_CALLINFO_1(extern, OBJECT, js_Arguments, CONTEXT, 0, 0)
JSObject* FASTCALL
js_NewNullClosure(JSContext* cx, JSObject* funobj, JSObject* proto, JSObject *parent)
@ -401,10 +421,5 @@ js_NewNullClosure(JSContext* cx, JSObject* funobj, JSObject* proto, JSObject *pa
closure->dslots = NULL;
return closure;
}
JS_DEFINE_CALLINFO_4(extern, OBJECT, js_NewNullClosure, CONTEXT, OBJECT, OBJECT, OBJECT, 0, 0)
#define BUILTIN1 JS_DEFINE_CALLINFO_1
#define BUILTIN2 JS_DEFINE_CALLINFO_2
#define BUILTIN3 JS_DEFINE_CALLINFO_3
#define BUILTIN4 JS_DEFINE_CALLINFO_4
#define BUILTIN5 JS_DEFINE_CALLINFO_5
#include "builtins.tbl"

Просмотреть файл

@ -251,10 +251,33 @@ struct JSTraceableNative {
#endif
/*
* Declare a C function named <op> and a CallInfo struct named <op>_callinfo so the
* tracer can call it. |linkage| controls the visibility of both the function
* and the CallInfo global. It can be extern, static, or FRIEND, which
* specifies JS_FRIEND_API linkage for the function.
* This macro is used for builtin functions that can be called from JITted
* code. It declares a C function named <op> and a CallInfo struct named
* <op>_ci so the tracer can call it. The <N> in JS_DEFINE_CALLINFO_<N> is
* the number of arguments the builtin takes. Builtins with no arguments
* are not supported. Using a macro is clunky but ensures that the types
* for each C function matches those for the corresponding CallInfo struct;
* mismatched types can cause subtle problems.
*
* The macro arguments are:
*
* - The linkage for the function and the associated CallInfo global. It
* can be extern, static, or FRIEND, which specifies JS_FRIEND_API linkage
* for the function.
*
* - The return type. This identifier must name one of the _JS_TYPEINFO_*
* macros defined in jsbuiltins.h.
*
* - The builtin name.
*
* - The parameter types.
*
* - The cse flag. 1 if the builtin call can be optimized away by common
* subexpression elimination; otherwise 0. This should be 1 only if the
* function is idempotent and the return value is determined solely by the
* arguments.
*
* - The fold flag. Reserved. The same as cse for now.
*/
#define JS_DEFINE_CALLINFO_1(linkage, rt, op, at0, cse, fold) \
_JS_DEFINE_CALLINFO(linkage, op, _JS_CTYPE_TYPE(rt), (_JS_CTYPE_TYPE(at0)), \
@ -442,17 +465,28 @@ JS_DECLARE_CALLINFO(js_String_p_charCodeAt0_int)
JS_DECLARE_CALLINFO(js_String_p_charCodeAt_int)
/* Defined in jsbuiltins.cpp. */
#define BUILTIN1(linkage, rt, op, at0, cse, fold) JS_DECLARE_CALLINFO(op)
#define BUILTIN2(linkage, rt, op, at0, at1, cse, fold) JS_DECLARE_CALLINFO(op)
#define BUILTIN3(linkage, rt, op, at0, at1, at2, cse, fold) JS_DECLARE_CALLINFO(op)
#define BUILTIN4(linkage, rt, op, at0, at1, at2, at3, cse, fold) JS_DECLARE_CALLINFO(op)
#define BUILTIN5(linkage, rt, op, at0, at1, at2, at3, at4, cse, fold) JS_DECLARE_CALLINFO(op)
#include "builtins.tbl"
#undef BUILTIN
#undef BUILTIN1
#undef BUILTIN2
#undef BUILTIN3
#undef BUILTIN4
#undef BUILTIN5
JS_DECLARE_CALLINFO(js_BoxDouble)
JS_DECLARE_CALLINFO(js_BoxInt32)
JS_DECLARE_CALLINFO(js_UnboxDouble)
JS_DECLARE_CALLINFO(js_UnboxInt32)
JS_DECLARE_CALLINFO(js_dmod)
JS_DECLARE_CALLINFO(js_imod)
JS_DECLARE_CALLINFO(js_DoubleToInt32)
JS_DECLARE_CALLINFO(js_DoubleToUint32)
JS_DECLARE_CALLINFO(js_StringToNumber)
JS_DECLARE_CALLINFO(js_StringToInt32)
JS_DECLARE_CALLINFO(js_CloseIterator)
JS_DECLARE_CALLINFO(js_CallTree)
JS_DECLARE_CALLINFO(js_AddProperty)
JS_DECLARE_CALLINFO(js_HasNamedProperty)
JS_DECLARE_CALLINFO(js_HasNamedPropertyInt32)
JS_DECLARE_CALLINFO(js_CallGetter)
JS_DECLARE_CALLINFO(js_TypeOfObject)
JS_DECLARE_CALLINFO(js_TypeOfBoolean)
JS_DECLARE_CALLINFO(js_BooleanOrUndefinedToNumber)
JS_DECLARE_CALLINFO(js_BooleanOrUndefinedToString)
JS_DECLARE_CALLINFO(js_Arguments)
JS_DECLARE_CALLINFO(js_NewNullClosure)
#endif /* jsbuiltins_h___ */

Просмотреть файл

@ -443,6 +443,7 @@ js_CloseIterator(JSContext *cx, jsval v)
#endif
return JS_TRUE;
}
JS_DEFINE_CALLINFO_2(FRIEND, BOOL, js_CloseIterator, CONTEXT, JSVAL, 0, 0)
static JSBool
CallEnumeratorNext(JSContext *cx, JSObject *iterobj, uintN flags, jsval *rval)

Просмотреть файл

@ -1012,6 +1012,7 @@ js_String_p_charCodeAt_int(JSString* str, jsint i)
return 0;
return JSSTRING_CHARS(str)[i];
}
JS_DEFINE_CALLINFO_2(extern, INT32, js_String_p_charCodeAt_int, STRING, INT32, 1, 1)
jsdouble FASTCALL
js_String_p_charCodeAt0(JSString* str)
@ -1021,6 +1022,10 @@ js_String_p_charCodeAt0(JSString* str)
return jsdouble(JSSTRING_CHARS(str)[0]);
}
/*
* The FuncFilter replaces the generic double version of charCodeAt with the
* integer fast path if appropriate.
*/
int32 FASTCALL
js_String_p_charCodeAt0_int(JSString* str)
{
@ -1028,13 +1033,7 @@ js_String_p_charCodeAt0_int(JSString* str)
return 0;
return JSSTRING_CHARS(str)[0];
}
/*
* The FuncFilter replaces the generic double version of charCodeAt with the
* integer fast path if appropriate.
*/
JS_DEFINE_CALLINFO_1(extern, INT32, js_String_p_charCodeAt0_int, STRING, 1, 1)
JS_DEFINE_CALLINFO_2(extern, INT32, js_String_p_charCodeAt_int, STRING, INT32, 1, 1)
#endif
jsint
@ -2383,9 +2382,6 @@ js_String_getelem(JSContext* cx, JSString* str, int32 i)
}
#endif
JS_DEFINE_CALLINFO_2(extern, BOOL, js_EqualStrings, STRING, STRING, 1, 1)
JS_DEFINE_CALLINFO_2(extern, INT32, js_CompareStrings, STRING, STRING, 1, 1)
JS_DEFINE_TRCINFO_1(str_toString,
(2, (extern, STRING_RETRY, String_p_toString, CONTEXT, THIS, 1, 1)))
JS_DEFINE_TRCINFO_1(str_charAt,
@ -2491,7 +2487,6 @@ js_String_tn(JSContext* cx, JSObject* proto, JSString* str)
obj->fslots[JSSLOT_PRIVATE] = STRING_TO_JSVAL(str);
return obj;
}
JS_DEFINE_CALLINFO_3(extern, OBJECT, js_String_tn, CONTEXT, CALLEE_PROTOTYPE, STRING, 0, 0)
#endif /* !JS_TRACER */
@ -3061,6 +3056,7 @@ js_EqualStrings(JSString *str1, JSString *str2)
return JS_TRUE;
}
JS_DEFINE_CALLINFO_2(extern, BOOL, js_EqualStrings, STRING, STRING, 1, 1)
int32 JS_FASTCALL
js_CompareStrings(JSString *str1, JSString *str2)
@ -3086,6 +3082,7 @@ js_CompareStrings(JSString *str1, JSString *str2)
}
return (intN)(l1 - l2);
}
JS_DEFINE_CALLINFO_2(extern, INT32, js_CompareStrings, STRING, STRING, 1, 1)
size_t
js_strlen(const jschar *s)

Просмотреть файл

@ -623,8 +623,9 @@ js_AttemptCompilation(JSTraceMonitor* tm, JSObject* globalObj, jsbytecode* pc)
}
}
JS_DEFINE_CALLINFO_1(static, DOUBLE, i2f, INT32, 1, 1)
JS_DEFINE_CALLINFO_1(static, DOUBLE, u2f, UINT32, 1, 1)
// Forward declarations.
JS_DEFINE_CALLINFO_1(static, DOUBLE, i2f, INT32, 1, 1)
JS_DEFINE_CALLINFO_1(static, DOUBLE, u2f, UINT32, 1, 1)
static bool isi2f(LInsp i)
{
@ -727,88 +728,87 @@ static bool overflowSafe(LIns* i)
/* soft float support */
JS_DEFINE_CALLINFO_1(static, DOUBLE, fneg, DOUBLE, 1, 1)
JS_DEFINE_CALLINFO_2(static, INT32, fcmpeq, DOUBLE, DOUBLE, 1, 1)
JS_DEFINE_CALLINFO_2(static, INT32, fcmplt, DOUBLE, DOUBLE, 1, 1)
JS_DEFINE_CALLINFO_2(static, INT32, fcmple, DOUBLE, DOUBLE, 1, 1)
JS_DEFINE_CALLINFO_2(static, INT32, fcmpgt, DOUBLE, DOUBLE, 1, 1)
JS_DEFINE_CALLINFO_2(static, INT32, fcmpge, DOUBLE, DOUBLE, 1, 1)
JS_DEFINE_CALLINFO_2(static, DOUBLE, fmul, DOUBLE, DOUBLE, 1, 1)
JS_DEFINE_CALLINFO_2(static, DOUBLE, fadd, DOUBLE, DOUBLE, 1, 1)
JS_DEFINE_CALLINFO_2(static, DOUBLE, fdiv, DOUBLE, DOUBLE, 1, 1)
JS_DEFINE_CALLINFO_2(static, DOUBLE, fsub, DOUBLE, DOUBLE, 1, 1)
jsdouble FASTCALL
static jsdouble FASTCALL
fneg(jsdouble x)
{
return -x;
}
JS_DEFINE_CALLINFO_1(static, DOUBLE, fneg, DOUBLE, 1, 1)
jsdouble FASTCALL
static jsdouble FASTCALL
i2f(int32 i)
{
return i;
}
jsdouble FASTCALL
static jsdouble FASTCALL
u2f(jsuint u)
{
return u;
}
int32 FASTCALL
static int32 FASTCALL
fcmpeq(jsdouble x, jsdouble y)
{
return x==y;
}
JS_DEFINE_CALLINFO_2(static, INT32, fcmpeq, DOUBLE, DOUBLE, 1, 1)
int32 FASTCALL
static int32 FASTCALL
fcmplt(jsdouble x, jsdouble y)
{
return x < y;
}
JS_DEFINE_CALLINFO_2(static, INT32, fcmplt, DOUBLE, DOUBLE, 1, 1)
int32 FASTCALL
static int32 FASTCALL
fcmple(jsdouble x, jsdouble y)
{
return x <= y;
}
JS_DEFINE_CALLINFO_2(static, INT32, fcmple, DOUBLE, DOUBLE, 1, 1)
int32 FASTCALL
static int32 FASTCALL
fcmpgt(jsdouble x, jsdouble y)
{
return x > y;
}
JS_DEFINE_CALLINFO_2(static, INT32, fcmpgt, DOUBLE, DOUBLE, 1, 1)
int32 FASTCALL
static int32 FASTCALL
fcmpge(jsdouble x, jsdouble y)
{
return x >= y;
}
JS_DEFINE_CALLINFO_2(static, INT32, fcmpge, DOUBLE, DOUBLE, 1, 1)
jsdouble FASTCALL
static jsdouble FASTCALL
fmul(jsdouble x, jsdouble y)
{
return x * y;
}
JS_DEFINE_CALLINFO_2(static, DOUBLE, fmul, DOUBLE, DOUBLE, 1, 1)
jsdouble FASTCALL
static jsdouble FASTCALL
fadd(jsdouble x, jsdouble y)
{
return x + y;
}
JS_DEFINE_CALLINFO_2(static, DOUBLE, fadd, DOUBLE, DOUBLE, 1, 1)
jsdouble FASTCALL
static jsdouble FASTCALL
fdiv(jsdouble x, jsdouble y)
{
return x / y;
}
JS_DEFINE_CALLINFO_2(static, DOUBLE, fdiv, DOUBLE, DOUBLE, 1, 1)
jsdouble FASTCALL
static jsdouble FASTCALL
fsub(jsdouble x, jsdouble y)
{
return x - y;
}
JS_DEFINE_CALLINFO_2(static, DOUBLE, fsub, DOUBLE, DOUBLE, 1, 1)
class SoftFloatFilter: public LirWriter
{