diff --git a/js/src/builtins.tbl b/js/src/builtins.tbl index 6eb65b317f4..fa8cb488e86 100644 --- a/js/src/builtins.tbl +++ b/js/src/builtins.tbl @@ -91,17 +91,3 @@ BUILTIN2(STRING, TypeOfBoolean, CONTEXT, INT32, BUILTIN2(DOUBLE, BooleanToNumber, CONTEXT, INT32, 1, 1) BUILTIN2(STRING, ObjectToString, CONTEXT, OBJECT, 0, 0) BUILTIN1(OBJECT, Arguments, CONTEXT, 0, 0) - -// soft float -BUILTIN1(DOUBLE, fneg, DOUBLE, 1, 1) -BUILTIN1(DOUBLE, i2f, INT32, 1, 1) -BUILTIN1(DOUBLE, u2f, UINT32, 1, 1) -BUILTIN2(INT32, fcmpeq, DOUBLE, DOUBLE, 1, 1) -BUILTIN2(INT32, fcmplt, DOUBLE, DOUBLE, 1, 1) -BUILTIN2(INT32, fcmple, DOUBLE, DOUBLE, 1, 1) -BUILTIN2(INT32, fcmpgt, DOUBLE, DOUBLE, 1, 1) -BUILTIN2(INT32, fcmpge, DOUBLE, DOUBLE, 1, 1) -BUILTIN2(DOUBLE, fmul, DOUBLE, DOUBLE, 1, 1) -BUILTIN2(DOUBLE, fadd, DOUBLE, DOUBLE, 1, 1) -BUILTIN2(DOUBLE, fdiv, DOUBLE, DOUBLE, 1, 1) -BUILTIN2(DOUBLE, fsub, DOUBLE, DOUBLE, 1, 1) diff --git a/js/src/jsbuiltins.cpp b/js/src/jsbuiltins.cpp index 0bc517003fb..9727e1dfa97 100644 --- a/js/src/jsbuiltins.cpp +++ b/js/src/jsbuiltins.cpp @@ -454,79 +454,6 @@ js_Arguments(JSContext* cx) return NULL; } -/* soft float */ - -jsdouble FASTCALL -js_fneg(jsdouble x) -{ - return -x; -} - -jsdouble FASTCALL -js_i2f(int32 i) -{ - return i; -} - -jsdouble FASTCALL -js_u2f(jsuint u) -{ - return u; -} - -int32 FASTCALL -js_fcmpeq(jsdouble x, jsdouble y) -{ - return x==y; -} - -int32 FASTCALL -js_fcmplt(jsdouble x, jsdouble y) -{ - return x < y; -} - -int32 FASTCALL -js_fcmple(jsdouble x, jsdouble y) -{ - return x <= y; -} - -int32 FASTCALL -js_fcmpgt(jsdouble x, jsdouble y) -{ - return x > y; -} - -int32 FASTCALL -js_fcmpge(jsdouble x, jsdouble y) -{ - return x >= y; -} - -jsdouble FASTCALL -js_fmul(jsdouble x, jsdouble y) -{ - return x * y; -} -jsdouble FASTCALL -js_fadd(jsdouble x, jsdouble y) -{ - return x + y; -} - -jsdouble FASTCALL -js_fdiv(jsdouble x, jsdouble y) -{ - return x / y; -} - -jsdouble FASTCALL -js_fsub(jsdouble x, jsdouble y) -{ - return x - y; -} - #define BUILTIN1 JS_DEFINE_CALLINFO_1 #define BUILTIN2 JS_DEFINE_CALLINFO_2 #define BUILTIN3 JS_DEFINE_CALLINFO_3 diff --git a/js/src/jstracer.cpp b/js/src/jstracer.cpp index 8e845fd34d2..8955784485a 100644 --- a/js/src/jstracer.cpp +++ b/js/src/jstracer.cpp @@ -373,6 +373,11 @@ Oracle::clear() _dontDemote.reset(); } +#if defined(NJ_SOFTFLOAT) +JS_DECLARE_CALLINFO(i2f) +JS_DECLARE_CALLINFO(u2f) +#endif + static bool isi2f(LInsp i) { if (i->isop(LIR_i2f)) @@ -468,6 +473,92 @@ static bool overflowSafe(LIns* i) } #if defined(NJ_SOFTFLOAT) +/* soft float */ + +jsdouble FASTCALL +js_fneg(jsdouble x) +{ + return -x; +} + +jsdouble FASTCALL +js_i2f(int32 i) +{ + return i; +} + +jsdouble FASTCALL +js_u2f(jsuint u) +{ + return u; +} + +int32 FASTCALL +js_fcmpeq(jsdouble x, jsdouble y) +{ + return x==y; +} + +int32 FASTCALL +js_fcmplt(jsdouble x, jsdouble y) +{ + return x < y; +} + +int32 FASTCALL +js_fcmple(jsdouble x, jsdouble y) +{ + return x <= y; +} + +int32 FASTCALL +js_fcmpgt(jsdouble x, jsdouble y) +{ + return x > y; +} + +int32 FASTCALL +js_fcmpge(jsdouble x, jsdouble y) +{ + return x >= y; +} + +jsdouble FASTCALL +js_fmul(jsdouble x, jsdouble y) +{ + return x * y; +} + +jsdouble FASTCALL +js_fadd(jsdouble x, jsdouble y) +{ + return x + y; +} + +jsdouble FASTCALL +js_fdiv(jsdouble x, jsdouble y) +{ + return x / y; +} + +jsdouble FASTCALL +js_fsub(jsdouble x, jsdouble y) +{ + return x - y; +} + +JS_DEFINE_CALLINFO_1(DOUBLE, fneg, DOUBLE, 1, 1) +JS_DEFINE_CALLINFO_1(DOUBLE, i2f, INT32, 1, 1) +JS_DEFINE_CALLINFO_1(DOUBLE, u2f, UINT32, 1, 1) +JS_DEFINE_CALLINFO_2(INT32, fcmpeq, DOUBLE, DOUBLE, 1, 1) +JS_DEFINE_CALLINFO_2(INT32, fcmplt, DOUBLE, DOUBLE, 1, 1) +JS_DEFINE_CALLINFO_2(INT32, fcmple, DOUBLE, DOUBLE, 1, 1) +JS_DEFINE_CALLINFO_2(INT32, fcmpgt, DOUBLE, DOUBLE, 1, 1) +JS_DEFINE_CALLINFO_2(INT32, fcmpge, DOUBLE, DOUBLE, 1, 1) +JS_DEFINE_CALLINFO_2(DOUBLE, fmul, DOUBLE, DOUBLE, 1, 1) +JS_DEFINE_CALLINFO_2(DOUBLE, fadd, DOUBLE, DOUBLE, 1, 1) +JS_DEFINE_CALLINFO_2(DOUBLE, fdiv, DOUBLE, DOUBLE, 1, 1) +JS_DEFINE_CALLINFO_2(DOUBLE, fsub, DOUBLE, DOUBLE, 1, 1) class SoftFloatFilter: public LirWriter {