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

This commit is contained in:
2009-05-05 17:36:26 -07:00
parent b168c041b8
commit 44581945d7
8 changed files with 108 additions and 66 deletions

View File

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

View File

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

View File

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

View File

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

View File

@@ -251,10 +251,33 @@ struct JSTraceableNative {
#endif #endif
/* /*
* Declare a C function named <op> and a CallInfo struct named <op>_callinfo so the * This macro is used for builtin functions that can be called from JITted
* tracer can call it. |linkage| controls the visibility of both the function * code. It declares a C function named <op> and a CallInfo struct named
* and the CallInfo global. It can be extern, static, or FRIEND, which * <op>_ci so the tracer can call it. The <N> in JS_DEFINE_CALLINFO_<N> is
* specifies JS_FRIEND_API linkage for the function. * 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) \ #define JS_DEFINE_CALLINFO_1(linkage, rt, op, at0, cse, fold) \
_JS_DEFINE_CALLINFO(linkage, op, _JS_CTYPE_TYPE(rt), (_JS_CTYPE_TYPE(at0)), \ _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) JS_DECLARE_CALLINFO(js_String_p_charCodeAt_int)
/* Defined in jsbuiltins.cpp. */ /* Defined in jsbuiltins.cpp. */
#define BUILTIN1(linkage, rt, op, at0, cse, fold) JS_DECLARE_CALLINFO(op) JS_DECLARE_CALLINFO(js_BoxDouble)
#define BUILTIN2(linkage, rt, op, at0, at1, cse, fold) JS_DECLARE_CALLINFO(op) JS_DECLARE_CALLINFO(js_BoxInt32)
#define BUILTIN3(linkage, rt, op, at0, at1, at2, cse, fold) JS_DECLARE_CALLINFO(op) JS_DECLARE_CALLINFO(js_UnboxDouble)
#define BUILTIN4(linkage, rt, op, at0, at1, at2, at3, cse, fold) JS_DECLARE_CALLINFO(op) JS_DECLARE_CALLINFO(js_UnboxInt32)
#define BUILTIN5(linkage, rt, op, at0, at1, at2, at3, at4, cse, fold) JS_DECLARE_CALLINFO(op) JS_DECLARE_CALLINFO(js_dmod)
#include "builtins.tbl" JS_DECLARE_CALLINFO(js_imod)
#undef BUILTIN JS_DECLARE_CALLINFO(js_DoubleToInt32)
#undef BUILTIN1 JS_DECLARE_CALLINFO(js_DoubleToUint32)
#undef BUILTIN2
#undef BUILTIN3 JS_DECLARE_CALLINFO(js_StringToNumber)
#undef BUILTIN4 JS_DECLARE_CALLINFO(js_StringToInt32)
#undef BUILTIN5 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___ */ #endif /* jsbuiltins_h___ */

View File

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

View File

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

View File

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