зеркало из https://github.com/mozilla/gecko-dev.git
Bug 552812 - nanojit: factor out AccSet differences into TM and TR (TM-specific part). r=gal.
This commit is contained in:
Родитель
6b96b67f4b
Коммит
b2a60fa1e2
|
@ -907,16 +907,16 @@ js_Array_dense_setelem(JSContext* cx, JSObject* obj, jsint i, ValueArgType v)
|
||||||
{
|
{
|
||||||
return dense_grow(cx, obj, i, ValueArgToConstRef(v));
|
return dense_grow(cx, obj, i, ValueArgToConstRef(v));
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_4(extern, BOOL, js_Array_dense_setelem, CONTEXT, OBJECT, INT32, VALUE, 0,
|
JS_DEFINE_CALLINFO_4(extern, BOOL, js_Array_dense_setelem, CONTEXT, OBJECT, INT32, VALUE,
|
||||||
nanojit::ACC_STORE_ANY)
|
0, nanojit::ACCSET_STORE_ANY)
|
||||||
|
|
||||||
JSBool FASTCALL
|
JSBool FASTCALL
|
||||||
js_Array_dense_setelem_int(JSContext* cx, JSObject* obj, jsint i, int32 j)
|
js_Array_dense_setelem_int(JSContext* cx, JSObject* obj, jsint i, int32 j)
|
||||||
{
|
{
|
||||||
return dense_grow(cx, obj, i, Int32Value(j));
|
return dense_grow(cx, obj, i, Int32Value(j));
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_4(extern, BOOL, js_Array_dense_setelem_int, CONTEXT, OBJECT, INT32, INT32, 0,
|
JS_DEFINE_CALLINFO_4(extern, BOOL, js_Array_dense_setelem_int, CONTEXT, OBJECT, INT32, INT32,
|
||||||
nanojit::ACC_STORE_ANY)
|
0, nanojit::ACCSET_STORE_ANY)
|
||||||
|
|
||||||
JSBool FASTCALL
|
JSBool FASTCALL
|
||||||
js_Array_dense_setelem_double(JSContext* cx, JSObject* obj, jsint i, jsdouble d)
|
js_Array_dense_setelem_double(JSContext* cx, JSObject* obj, jsint i, jsdouble d)
|
||||||
|
@ -924,7 +924,7 @@ js_Array_dense_setelem_double(JSContext* cx, JSObject* obj, jsint i, jsdouble d)
|
||||||
return dense_grow(cx, obj, i, NumberValue(d));
|
return dense_grow(cx, obj, i, NumberValue(d));
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_4(extern, BOOL, js_Array_dense_setelem_double, CONTEXT, OBJECT, INT32, DOUBLE,
|
JS_DEFINE_CALLINFO_4(extern, BOOL, js_Array_dense_setelem_double, CONTEXT, OBJECT, INT32, DOUBLE,
|
||||||
0, nanojit::ACC_STORE_ANY)
|
0, nanojit::ACCSET_STORE_ANY)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static JSBool
|
static JSBool
|
||||||
|
@ -2099,8 +2099,8 @@ js_ArrayCompPush_tn(JSContext *cx, JSObject *obj, ValueArgType v)
|
||||||
{
|
{
|
||||||
return ArrayCompPushImpl(cx, obj, ValueArgToConstRef(v));
|
return ArrayCompPushImpl(cx, obj, ValueArgToConstRef(v));
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_3(extern, BOOL, js_ArrayCompPush_tn, CONTEXT, OBJECT, VALUE, 0,
|
JS_DEFINE_CALLINFO_3(extern, BOOL, js_ArrayCompPush_tn, CONTEXT, OBJECT, VALUE,
|
||||||
nanojit::ACC_STORE_ANY)
|
0, nanojit::ACCSET_STORE_ANY)
|
||||||
|
|
||||||
static JSBool
|
static JSBool
|
||||||
array_push(JSContext *cx, uintN argc, Value *vp)
|
array_push(JSContext *cx, uintN argc, Value *vp)
|
||||||
|
@ -3015,8 +3015,8 @@ js_NewArrayWithSlots(JSContext* cx, JSObject* proto, uint32 len)
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
#ifdef JS_TRACER
|
#ifdef JS_TRACER
|
||||||
JS_DEFINE_CALLINFO_3(extern, OBJECT, js_NewArrayWithSlots, CONTEXT, OBJECT, UINT32, 0,
|
JS_DEFINE_CALLINFO_3(extern, OBJECT, js_NewArrayWithSlots, CONTEXT, OBJECT, UINT32,
|
||||||
nanojit::ACC_STORE_ANY)
|
0, nanojit::ACCSET_STORE_ANY)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
JSObject* JS_FASTCALL
|
JSObject* JS_FASTCALL
|
||||||
|
@ -3025,7 +3025,8 @@ js_NewEmptyArray(JSContext* cx, JSObject* proto)
|
||||||
return js_NewArrayWithSlots(cx, proto, 0);
|
return js_NewArrayWithSlots(cx, proto, 0);
|
||||||
}
|
}
|
||||||
#ifdef JS_TRACER
|
#ifdef JS_TRACER
|
||||||
JS_DEFINE_CALLINFO_2(extern, OBJECT, js_NewEmptyArray, CONTEXT, OBJECT, 0, nanojit::ACC_STORE_ANY)
|
JS_DEFINE_CALLINFO_2(extern, OBJECT, js_NewEmptyArray, CONTEXT, OBJECT,
|
||||||
|
0, nanojit::ACCSET_STORE_ANY)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
JSObject *
|
JSObject *
|
||||||
|
|
|
@ -91,7 +91,7 @@ js_dmod(jsdouble a, jsdouble b)
|
||||||
}
|
}
|
||||||
return js_fmod(a, b);
|
return js_fmod(a, b);
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_2(extern, DOUBLE, js_dmod, DOUBLE, DOUBLE, 1, ACC_NONE)
|
JS_DEFINE_CALLINFO_2(extern, DOUBLE, js_dmod, DOUBLE, DOUBLE, 1, ACCSET_NONE)
|
||||||
|
|
||||||
int32 FASTCALL
|
int32 FASTCALL
|
||||||
js_imod(int32 a, int32 b)
|
js_imod(int32 a, int32 b)
|
||||||
|
@ -101,7 +101,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, ACC_NONE)
|
JS_DEFINE_CALLINFO_2(extern, INT32, js_imod, INT32, INT32, 1, ACCSET_NONE)
|
||||||
|
|
||||||
#if JS_BITS_PER_WORD == 32
|
#if JS_BITS_PER_WORD == 32
|
||||||
|
|
||||||
|
@ -116,7 +116,7 @@ js_UnboxDouble(uint32 tag, uint32 payload)
|
||||||
l.s.payload.u32 = payload;
|
l.s.payload.u32 = payload;
|
||||||
return l.asDouble;
|
return l.asDouble;
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_2(extern, DOUBLE, js_UnboxDouble, UINT32, UINT32, 1, ACC_NONE)
|
JS_DEFINE_CALLINFO_2(extern, DOUBLE, js_UnboxDouble, UINT32, UINT32, 1, ACCSET_NONE)
|
||||||
|
|
||||||
int32 FASTCALL
|
int32 FASTCALL
|
||||||
js_UnboxInt32(uint32 tag, uint32 payload)
|
js_UnboxInt32(uint32 tag, uint32 payload)
|
||||||
|
@ -129,7 +129,7 @@ js_UnboxInt32(uint32 tag, uint32 payload)
|
||||||
l.s.payload.u32 = payload;
|
l.s.payload.u32 = payload;
|
||||||
return js_DoubleToECMAInt32(l.asDouble);
|
return js_DoubleToECMAInt32(l.asDouble);
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_2(extern, INT32, js_UnboxInt32, UINT32, UINT32, 1, ACC_NONE)
|
JS_DEFINE_CALLINFO_2(extern, INT32, js_UnboxInt32, UINT32, UINT32, 1, ACCSET_NONE)
|
||||||
|
|
||||||
#elif JS_BITS_PER_WORD == 64
|
#elif JS_BITS_PER_WORD == 64
|
||||||
|
|
||||||
|
@ -140,7 +140,7 @@ js_UnboxDouble(Value v)
|
||||||
return (jsdouble)v.toInt32();
|
return (jsdouble)v.toInt32();
|
||||||
return v.toDouble();
|
return v.toDouble();
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_1(extern, DOUBLE, js_UnboxDouble, JSVAL, 1, ACC_NONE)
|
JS_DEFINE_CALLINFO_1(extern, DOUBLE, js_UnboxDouble, JSVAL, 1, ACCSET_NONE)
|
||||||
|
|
||||||
int32 FASTCALL
|
int32 FASTCALL
|
||||||
js_UnboxInt32(Value v)
|
js_UnboxInt32(Value v)
|
||||||
|
@ -149,7 +149,7 @@ js_UnboxInt32(Value v)
|
||||||
return v.toInt32();
|
return v.toInt32();
|
||||||
return js_DoubleToECMAInt32(v.toDouble());
|
return js_DoubleToECMAInt32(v.toDouble());
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_1(extern, INT32, js_UnboxInt32, VALUE, 1, ACC_NONE)
|
JS_DEFINE_CALLINFO_1(extern, INT32, js_UnboxInt32, VALUE, 1, ACCSET_NONE)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -158,28 +158,28 @@ js_DoubleToInt32(jsdouble d)
|
||||||
{
|
{
|
||||||
return js_DoubleToECMAInt32(d);
|
return js_DoubleToECMAInt32(d);
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_1(extern, INT32, js_DoubleToInt32, DOUBLE, 1, ACC_NONE)
|
JS_DEFINE_CALLINFO_1(extern, INT32, js_DoubleToInt32, DOUBLE, 1, ACCSET_NONE)
|
||||||
|
|
||||||
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, ACC_NONE)
|
JS_DEFINE_CALLINFO_1(extern, UINT32, js_DoubleToUint32, DOUBLE, 1, ACCSET_NONE)
|
||||||
|
|
||||||
jsdouble FASTCALL
|
jsdouble FASTCALL
|
||||||
js_StringToNumber(JSContext* cx, JSString* str)
|
js_StringToNumber(JSContext* cx, JSString* str)
|
||||||
{
|
{
|
||||||
return StringToNumberType<jsdouble>(cx, str);
|
return StringToNumberType<jsdouble>(cx, str);
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_2(extern, DOUBLE, js_StringToNumber, CONTEXT, STRING, 1, ACC_NONE)
|
JS_DEFINE_CALLINFO_2(extern, DOUBLE, js_StringToNumber, CONTEXT, STRING, 1, ACCSET_NONE)
|
||||||
|
|
||||||
int32 FASTCALL
|
int32 FASTCALL
|
||||||
js_StringToInt32(JSContext* cx, JSString* str)
|
js_StringToInt32(JSContext* cx, JSString* str)
|
||||||
{
|
{
|
||||||
return StringToNumberType<int32>(cx, str);
|
return StringToNumberType<int32>(cx, str);
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_2(extern, INT32, js_StringToInt32, CONTEXT, STRING, 1, ACC_NONE)
|
JS_DEFINE_CALLINFO_2(extern, INT32, js_StringToInt32, CONTEXT, STRING, 1, ACCSET_NONE)
|
||||||
|
|
||||||
/* Nb: it's always safe to set isDefinitelyAtom to false if you're unsure or don't know. */
|
/* Nb: it's always safe to set isDefinitelyAtom to false if you're unsure or don't know. */
|
||||||
static inline JSBool
|
static inline JSBool
|
||||||
|
@ -241,14 +241,15 @@ js_AddProperty(JSContext* cx, JSObject* obj, JSScopeProperty* sprop)
|
||||||
{
|
{
|
||||||
return AddPropertyHelper(cx, obj, sprop, /* isDefinitelyAtom = */false);
|
return AddPropertyHelper(cx, obj, sprop, /* isDefinitelyAtom = */false);
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_3(extern, BOOL, js_AddProperty, CONTEXT, OBJECT, SCOPEPROP, 0, ACC_STORE_ANY)
|
JS_DEFINE_CALLINFO_3(extern, BOOL, js_AddProperty, CONTEXT, OBJECT, SCOPEPROP, 0, ACCSET_STORE_ANY)
|
||||||
|
|
||||||
JSBool FASTCALL
|
JSBool FASTCALL
|
||||||
js_AddAtomProperty(JSContext* cx, JSObject* obj, JSScopeProperty* sprop)
|
js_AddAtomProperty(JSContext* cx, JSObject* obj, JSScopeProperty* sprop)
|
||||||
{
|
{
|
||||||
return AddPropertyHelper(cx, obj, sprop, /* isDefinitelyAtom = */true);
|
return AddPropertyHelper(cx, obj, sprop, /* isDefinitelyAtom = */true);
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_3(extern, BOOL, js_AddAtomProperty, CONTEXT, OBJECT, SCOPEPROP, 0, ACC_STORE_ANY)
|
JS_DEFINE_CALLINFO_3(extern, BOOL, js_AddAtomProperty, CONTEXT, OBJECT, SCOPEPROP,
|
||||||
|
0, ACCSET_STORE_ANY)
|
||||||
|
|
||||||
static JSBool
|
static JSBool
|
||||||
HasProperty(JSContext* cx, JSObject* obj, jsid id)
|
HasProperty(JSContext* cx, JSObject* obj, jsid id)
|
||||||
|
@ -280,7 +281,8 @@ js_HasNamedProperty(JSContext* cx, JSObject* obj, JSString* idstr)
|
||||||
|
|
||||||
return HasProperty(cx, obj, ATOM_TO_JSID(atom));
|
return HasProperty(cx, obj, ATOM_TO_JSID(atom));
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_3(extern, BOOL, js_HasNamedProperty, CONTEXT, OBJECT, STRING, 0, ACC_STORE_ANY)
|
JS_DEFINE_CALLINFO_3(extern, BOOL, js_HasNamedProperty, CONTEXT, OBJECT, STRING,
|
||||||
|
0, ACCSET_STORE_ANY)
|
||||||
|
|
||||||
JSBool FASTCALL
|
JSBool FASTCALL
|
||||||
js_HasNamedPropertyInt32(JSContext* cx, JSObject* obj, int32 index)
|
js_HasNamedPropertyInt32(JSContext* cx, JSObject* obj, int32 index)
|
||||||
|
@ -291,8 +293,8 @@ 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,
|
JS_DEFINE_CALLINFO_3(extern, BOOL, js_HasNamedPropertyInt32, CONTEXT, OBJECT, INT32,
|
||||||
ACC_STORE_ANY)
|
0, ACCSET_STORE_ANY)
|
||||||
|
|
||||||
JSString* FASTCALL
|
JSString* FASTCALL
|
||||||
js_TypeOfObject(JSContext* cx, JSObject* obj)
|
js_TypeOfObject(JSContext* cx, JSObject* obj)
|
||||||
|
@ -300,7 +302,7 @@ js_TypeOfObject(JSContext* cx, JSObject* obj)
|
||||||
JS_ASSERT(obj);
|
JS_ASSERT(obj);
|
||||||
return ATOM_TO_STRING(cx->runtime->atomState.typeAtoms[obj->typeOf(cx)]);
|
return ATOM_TO_STRING(cx->runtime->atomState.typeAtoms[obj->typeOf(cx)]);
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_2(extern, STRING, js_TypeOfObject, CONTEXT, OBJECT, 1, ACC_NONE)
|
JS_DEFINE_CALLINFO_2(extern, STRING, js_TypeOfObject, CONTEXT, OBJECT, 1, ACCSET_NONE)
|
||||||
|
|
||||||
JSString* FASTCALL
|
JSString* FASTCALL
|
||||||
js_BooleanIntToString(JSContext *cx, int32 unboxed)
|
js_BooleanIntToString(JSContext *cx, int32 unboxed)
|
||||||
|
@ -308,7 +310,7 @@ js_BooleanIntToString(JSContext *cx, int32 unboxed)
|
||||||
JS_ASSERT(uint32(unboxed) <= 1);
|
JS_ASSERT(uint32(unboxed) <= 1);
|
||||||
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_BooleanIntToString, CONTEXT, INT32, 1, ACC_NONE)
|
JS_DEFINE_CALLINFO_2(extern, STRING, js_BooleanIntToString, CONTEXT, INT32, 1, ACCSET_NONE)
|
||||||
|
|
||||||
JSObject* FASTCALL
|
JSObject* FASTCALL
|
||||||
js_NewNullClosure(JSContext* cx, JSObject* funobj, JSObject* proto, JSObject* parent)
|
js_NewNullClosure(JSContext* cx, JSObject* funobj, JSObject* proto, JSObject* parent)
|
||||||
|
@ -327,8 +329,8 @@ js_NewNullClosure(JSContext* cx, JSObject* funobj, JSObject* proto, JSObject* pa
|
||||||
closure->initSharingEmptyScope(&js_FunctionClass, proto, parent, PrivateValue(fun));
|
closure->initSharingEmptyScope(&js_FunctionClass, proto, parent, PrivateValue(fun));
|
||||||
return closure;
|
return closure;
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_4(extern, OBJECT, js_NewNullClosure, CONTEXT, OBJECT, OBJECT, OBJECT, 0,
|
JS_DEFINE_CALLINFO_4(extern, OBJECT, js_NewNullClosure, CONTEXT, OBJECT, OBJECT, OBJECT,
|
||||||
ACC_STORE_ANY)
|
0, ACCSET_STORE_ANY)
|
||||||
|
|
||||||
JS_REQUIRES_STACK JSBool FASTCALL
|
JS_REQUIRES_STACK JSBool FASTCALL
|
||||||
js_PopInterpFrame(JSContext* cx, TracerState* state)
|
js_PopInterpFrame(JSContext* cx, TracerState* state)
|
||||||
|
@ -365,7 +367,7 @@ js_PopInterpFrame(JSContext* cx, TracerState* state)
|
||||||
*state->inlineCallCountp = *state->inlineCallCountp - 1;
|
*state->inlineCallCountp = *state->inlineCallCountp - 1;
|
||||||
return JS_TRUE;
|
return JS_TRUE;
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_2(extern, BOOL, js_PopInterpFrame, CONTEXT, TRACERSTATE, 0, ACC_STORE_ANY)
|
JS_DEFINE_CALLINFO_2(extern, BOOL, js_PopInterpFrame, CONTEXT, TRACERSTATE, 0, ACCSET_STORE_ANY)
|
||||||
|
|
||||||
JSString* FASTCALL
|
JSString* FASTCALL
|
||||||
js_ConcatN(JSContext *cx, JSString **strArray, uint32 size)
|
js_ConcatN(JSContext *cx, JSString **strArray, uint32 size)
|
||||||
|
@ -404,4 +406,4 @@ js_ConcatN(JSContext *cx, JSString **strArray, uint32 size)
|
||||||
cx->free(buf);
|
cx->free(buf);
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_3(extern, STRING, js_ConcatN, CONTEXT, STRINGPTR, UINT32, 0, ACC_STORE_ANY)
|
JS_DEFINE_CALLINFO_3(extern, STRING, js_ConcatN, CONTEXT, STRINGPTR, UINT32, 0, ACCSET_STORE_ANY)
|
||||||
|
|
|
@ -282,14 +282,14 @@ struct ClosureVarInfo;
|
||||||
_JS_TN_LINKAGE(linkage, crtype) name cargtypes; \
|
_JS_TN_LINKAGE(linkage, crtype) name cargtypes; \
|
||||||
_JS_CI_LINKAGE(linkage) const nanojit::CallInfo _JS_CALLINFO(name) = \
|
_JS_CI_LINKAGE(linkage) const nanojit::CallInfo _JS_CALLINFO(name) = \
|
||||||
{ (intptr_t) &name, argtypes, nanojit::ABI_CDECL, isPure, storeAccSet _JS_CI_NAME(name) };\
|
{ (intptr_t) &name, argtypes, nanojit::ABI_CDECL, isPure, storeAccSet _JS_CI_NAME(name) };\
|
||||||
JS_STATIC_ASSERT_IF(isPure, storeAccSet == nanojit::ACC_NONE);
|
JS_STATIC_ASSERT_IF(isPure, (storeAccSet) == nanojit::ACCSET_NONE);
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#define _JS_DEFINE_CALLINFO(linkage, name, crtype, cargtypes, argtypes, isPure, storeAccSet) \
|
#define _JS_DEFINE_CALLINFO(linkage, name, crtype, cargtypes, argtypes, isPure, storeAccSet) \
|
||||||
_JS_TN_LINKAGE(linkage, crtype) FASTCALL name cargtypes; \
|
_JS_TN_LINKAGE(linkage, crtype) FASTCALL name cargtypes; \
|
||||||
_JS_CI_LINKAGE(linkage) const nanojit::CallInfo _JS_CALLINFO(name) = \
|
_JS_CI_LINKAGE(linkage) const nanojit::CallInfo _JS_CALLINFO(name) = \
|
||||||
{ (intptr_t) &name, argtypes, nanojit::ABI_FASTCALL, isPure, storeAccSet _JS_CI_NAME(name) }; \
|
{ (intptr_t) &name, argtypes, nanojit::ABI_FASTCALL, isPure, storeAccSet _JS_CI_NAME(name) }; \
|
||||||
JS_STATIC_ASSERT_IF(isPure, storeAccSet == nanojit::ACC_NONE);
|
JS_STATIC_ASSERT_IF(isPure, (storeAccSet) == nanojit::ACCSET_NONE);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -2235,7 +2235,7 @@ date_valueOf(JSContext *cx, uintN argc, Value *vp)
|
||||||
|
|
||||||
// Don't really need an argument here, but we don't support arg-less builtins
|
// Don't really need an argument here, but we don't support arg-less builtins
|
||||||
JS_DEFINE_TRCINFO_1(date_now,
|
JS_DEFINE_TRCINFO_1(date_now,
|
||||||
(1, (static, DOUBLE, date_now_tn, CONTEXT, 0, nanojit::ACC_STORE_ANY)))
|
(1, (static, DOUBLE, date_now_tn, CONTEXT, 0, nanojit::ACCSET_STORE_ANY)))
|
||||||
|
|
||||||
static JSFunctionSpec date_static_methods[] = {
|
static JSFunctionSpec date_static_methods[] = {
|
||||||
JS_FN("UTC", date_UTC, MAXARGS,0),
|
JS_FN("UTC", date_UTC, MAXARGS,0),
|
||||||
|
|
|
@ -264,7 +264,7 @@ js_Arguments(JSContext *cx, JSObject *parent, uint32 argc, JSObject *callee,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
JS_DEFINE_CALLINFO_6(extern, OBJECT, js_Arguments, CONTEXT, OBJECT, UINT32, OBJECT,
|
JS_DEFINE_CALLINFO_6(extern, OBJECT, js_Arguments, CONTEXT, OBJECT, UINT32, OBJECT,
|
||||||
DOUBLEPTR, APNPTR, 0, nanojit::ACC_STORE_ANY)
|
DOUBLEPTR, APNPTR, 0, nanojit::ACCSET_STORE_ANY)
|
||||||
|
|
||||||
/* FIXME change the return type to void. */
|
/* FIXME change the return type to void. */
|
||||||
JSBool JS_FASTCALL
|
JSBool JS_FASTCALL
|
||||||
|
@ -277,7 +277,7 @@ js_PutArguments(JSContext *cx, JSObject *argsobj, Value *args)
|
||||||
}
|
}
|
||||||
|
|
||||||
JS_DEFINE_CALLINFO_3(extern, BOOL, js_PutArguments, CONTEXT, OBJECT, VALUEPTR, 0,
|
JS_DEFINE_CALLINFO_3(extern, BOOL, js_PutArguments, CONTEXT, OBJECT, VALUEPTR, 0,
|
||||||
nanojit::ACC_STORE_ANY)
|
nanojit::ACCSET_STORE_ANY)
|
||||||
|
|
||||||
static JSBool
|
static JSBool
|
||||||
args_delProperty(JSContext *cx, JSObject *obj, jsid id, Value *vp)
|
args_delProperty(JSContext *cx, JSObject *obj, jsid id, Value *vp)
|
||||||
|
@ -855,7 +855,7 @@ js_CreateCallObjectOnTrace(JSContext *cx, JSFunction *fun, JSObject *callee, JSO
|
||||||
}
|
}
|
||||||
|
|
||||||
JS_DEFINE_CALLINFO_4(extern, OBJECT, js_CreateCallObjectOnTrace, CONTEXT, FUNCTION, OBJECT, OBJECT,
|
JS_DEFINE_CALLINFO_4(extern, OBJECT, js_CreateCallObjectOnTrace, CONTEXT, FUNCTION, OBJECT, OBJECT,
|
||||||
0, nanojit::ACC_STORE_ANY)
|
0, nanojit::ACCSET_STORE_ANY)
|
||||||
|
|
||||||
JSFunction *
|
JSFunction *
|
||||||
js_GetCallObjectFunction(JSObject *obj)
|
js_GetCallObjectFunction(JSObject *obj)
|
||||||
|
@ -934,7 +934,7 @@ js_PutCallObjectOnTrace(JSContext *cx, JSObject *scopeChain, uint32 nargs, Value
|
||||||
}
|
}
|
||||||
|
|
||||||
JS_DEFINE_CALLINFO_6(extern, BOOL, js_PutCallObjectOnTrace, CONTEXT, OBJECT, UINT32, VALUEPTR,
|
JS_DEFINE_CALLINFO_6(extern, BOOL, js_PutCallObjectOnTrace, CONTEXT, OBJECT, UINT32, VALUEPTR,
|
||||||
UINT32, VALUEPTR, 0, nanojit::ACC_STORE_ANY)
|
UINT32, VALUEPTR, 0, nanojit::ACCSET_STORE_ANY)
|
||||||
|
|
||||||
static JSBool
|
static JSBool
|
||||||
call_enumerate(JSContext *cx, JSObject *obj)
|
call_enumerate(JSContext *cx, JSObject *obj)
|
||||||
|
@ -1141,7 +1141,7 @@ js_SetCallArg(JSContext *cx, JSObject *obj, jsid slotid, ValueArgType arg)
|
||||||
return CallPropertyOp(cx, obj, slotid, &argcopy, JSCPK_ARG, true);
|
return CallPropertyOp(cx, obj, slotid, &argcopy, JSCPK_ARG, true);
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_4(extern, BOOL, js_SetCallArg, CONTEXT, OBJECT, JSID, VALUE, 0,
|
JS_DEFINE_CALLINFO_4(extern, BOOL, js_SetCallArg, CONTEXT, OBJECT, JSID, VALUE, 0,
|
||||||
nanojit::ACC_STORE_ANY)
|
nanojit::ACCSET_STORE_ANY)
|
||||||
|
|
||||||
JSBool JS_FASTCALL
|
JSBool JS_FASTCALL
|
||||||
js_SetCallVar(JSContext *cx, JSObject *obj, jsid slotid, ValueArgType arg)
|
js_SetCallVar(JSContext *cx, JSObject *obj, jsid slotid, ValueArgType arg)
|
||||||
|
@ -1150,7 +1150,7 @@ js_SetCallVar(JSContext *cx, JSObject *obj, jsid slotid, ValueArgType arg)
|
||||||
return CallPropertyOp(cx, obj, slotid, &argcopy, JSCPK_VAR, true);
|
return CallPropertyOp(cx, obj, slotid, &argcopy, JSCPK_VAR, true);
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_4(extern, BOOL, js_SetCallVar, CONTEXT, OBJECT, JSID, VALUE, 0,
|
JS_DEFINE_CALLINFO_4(extern, BOOL, js_SetCallVar, CONTEXT, OBJECT, JSID, VALUE, 0,
|
||||||
nanojit::ACC_STORE_ANY)
|
nanojit::ACCSET_STORE_ANY)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static JSBool
|
static JSBool
|
||||||
|
@ -2400,7 +2400,7 @@ js_CloneFunctionObject(JSContext *cx, JSFunction *fun, JSObject *parent,
|
||||||
|
|
||||||
#ifdef JS_TRACER
|
#ifdef JS_TRACER
|
||||||
JS_DEFINE_CALLINFO_4(extern, OBJECT, js_CloneFunctionObject, CONTEXT, FUNCTION, OBJECT, OBJECT, 0,
|
JS_DEFINE_CALLINFO_4(extern, OBJECT, js_CloneFunctionObject, CONTEXT, FUNCTION, OBJECT, OBJECT, 0,
|
||||||
nanojit::ACC_STORE_ANY)
|
nanojit::ACCSET_STORE_ANY)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -2430,7 +2430,7 @@ js_AllocFlatClosure(JSContext *cx, JSFunction *fun, JSObject *scopeChain)
|
||||||
}
|
}
|
||||||
|
|
||||||
JS_DEFINE_CALLINFO_3(extern, OBJECT, js_AllocFlatClosure,
|
JS_DEFINE_CALLINFO_3(extern, OBJECT, js_AllocFlatClosure,
|
||||||
CONTEXT, FUNCTION, OBJECT, 0, nanojit::ACC_STORE_ANY)
|
CONTEXT, FUNCTION, OBJECT, 0, nanojit::ACCSET_STORE_ANY)
|
||||||
|
|
||||||
JS_REQUIRES_STACK JSObject *
|
JS_REQUIRES_STACK JSObject *
|
||||||
js_NewFlatClosure(JSContext *cx, JSFunction *fun)
|
js_NewFlatClosure(JSContext *cx, JSFunction *fun)
|
||||||
|
|
|
@ -572,7 +572,7 @@ math_toSource(JSContext *cx, uintN argc, Value *vp)
|
||||||
#define MATH_BUILTIN_CFUN_1(name, cfun) \
|
#define MATH_BUILTIN_CFUN_1(name, cfun) \
|
||||||
static jsdouble FASTCALL math_##name##_tn(jsdouble d) { return cfun(d); } \
|
static jsdouble FASTCALL math_##name##_tn(jsdouble d) { return cfun(d); } \
|
||||||
JS_DEFINE_TRCINFO_1(math_##name, \
|
JS_DEFINE_TRCINFO_1(math_##name, \
|
||||||
(1, (static, DOUBLE, math_##name##_tn, DOUBLE, 1, nanojit::ACC_NONE)))
|
(1, (static, DOUBLE, math_##name##_tn, DOUBLE, 1, nanojit::ACCSET_NONE)))
|
||||||
|
|
||||||
MATH_BUILTIN_CFUN_1(abs, fabs)
|
MATH_BUILTIN_CFUN_1(abs, fabs)
|
||||||
MATH_BUILTIN_1(atan)
|
MATH_BUILTIN_1(atan)
|
||||||
|
@ -618,7 +618,7 @@ math_exp_tn(JSContext *cx, jsdouble d)
|
||||||
}
|
}
|
||||||
|
|
||||||
JS_DEFINE_TRCINFO_1(math_exp,
|
JS_DEFINE_TRCINFO_1(math_exp,
|
||||||
(2, (static, DOUBLE, math_exp_tn, CONTEXT, DOUBLE, 1, nanojit::ACC_NONE)))
|
(2, (static, DOUBLE, math_exp_tn, CONTEXT, DOUBLE, 1, nanojit::ACCSET_NONE)))
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
@ -701,27 +701,27 @@ math_floor_tn(jsdouble x)
|
||||||
}
|
}
|
||||||
|
|
||||||
JS_DEFINE_TRCINFO_1(math_acos,
|
JS_DEFINE_TRCINFO_1(math_acos,
|
||||||
(1, (static, DOUBLE, math_acos_tn, DOUBLE, 1, nanojit::ACC_NONE)))
|
(1, (static, DOUBLE, math_acos_tn, DOUBLE, 1, nanojit::ACCSET_NONE)))
|
||||||
JS_DEFINE_TRCINFO_1(math_asin,
|
JS_DEFINE_TRCINFO_1(math_asin,
|
||||||
(1, (static, DOUBLE, math_asin_tn, DOUBLE, 1, nanojit::ACC_NONE)))
|
(1, (static, DOUBLE, math_asin_tn, DOUBLE, 1, nanojit::ACCSET_NONE)))
|
||||||
JS_DEFINE_TRCINFO_1(math_atan2,
|
JS_DEFINE_TRCINFO_1(math_atan2,
|
||||||
(2, (static, DOUBLE, math_atan2_kernel, DOUBLE, DOUBLE, 1, nanojit::ACC_NONE)))
|
(2, (static, DOUBLE, math_atan2_kernel, DOUBLE, DOUBLE, 1, nanojit::ACCSET_NONE)))
|
||||||
JS_DEFINE_TRCINFO_1(js_math_floor,
|
JS_DEFINE_TRCINFO_1(js_math_floor,
|
||||||
(1, (static, DOUBLE, math_floor_tn, DOUBLE, 1, nanojit::ACC_NONE)))
|
(1, (static, DOUBLE, math_floor_tn, DOUBLE, 1, nanojit::ACCSET_NONE)))
|
||||||
JS_DEFINE_TRCINFO_1(math_log,
|
JS_DEFINE_TRCINFO_1(math_log,
|
||||||
(1, (static, DOUBLE, math_log_tn, DOUBLE, 1, nanojit::ACC_NONE)))
|
(1, (static, DOUBLE, math_log_tn, DOUBLE, 1, nanojit::ACCSET_NONE)))
|
||||||
JS_DEFINE_TRCINFO_1(js_math_max,
|
JS_DEFINE_TRCINFO_1(js_math_max,
|
||||||
(2, (static, DOUBLE, math_max_tn, DOUBLE, DOUBLE, 1, nanojit::ACC_NONE)))
|
(2, (static, DOUBLE, math_max_tn, DOUBLE, DOUBLE, 1, nanojit::ACCSET_NONE)))
|
||||||
JS_DEFINE_TRCINFO_1(js_math_min,
|
JS_DEFINE_TRCINFO_1(js_math_min,
|
||||||
(2, (static, DOUBLE, math_min_tn, DOUBLE, DOUBLE, 1, nanojit::ACC_NONE)))
|
(2, (static, DOUBLE, math_min_tn, DOUBLE, DOUBLE, 1, nanojit::ACCSET_NONE)))
|
||||||
JS_DEFINE_TRCINFO_1(math_pow,
|
JS_DEFINE_TRCINFO_1(math_pow,
|
||||||
(2, (static, DOUBLE, math_pow_tn, DOUBLE, DOUBLE, 1, nanojit::ACC_NONE)))
|
(2, (static, DOUBLE, math_pow_tn, DOUBLE, DOUBLE, 1, nanojit::ACCSET_NONE)))
|
||||||
JS_DEFINE_TRCINFO_1(math_random,
|
JS_DEFINE_TRCINFO_1(math_random,
|
||||||
(1, (static, DOUBLE, math_random_tn, CONTEXT, 0, nanojit::ACC_STORE_ANY)))
|
(1, (static, DOUBLE, math_random_tn, CONTEXT, 0, nanojit::ACCSET_STORE_ANY)))
|
||||||
JS_DEFINE_TRCINFO_1(js_math_round,
|
JS_DEFINE_TRCINFO_1(js_math_round,
|
||||||
(1, (static, DOUBLE, math_round_tn, DOUBLE, 1, nanojit::ACC_NONE)))
|
(1, (static, DOUBLE, math_round_tn, DOUBLE, 1, nanojit::ACCSET_NONE)))
|
||||||
JS_DEFINE_TRCINFO_1(js_math_ceil,
|
JS_DEFINE_TRCINFO_1(js_math_ceil,
|
||||||
(1, (static, DOUBLE, math_ceil_tn, DOUBLE, 1, nanojit::ACC_NONE)))
|
(1, (static, DOUBLE, math_ceil_tn, DOUBLE, 1, nanojit::ACCSET_NONE)))
|
||||||
|
|
||||||
#endif /* JS_TRACER */
|
#endif /* JS_TRACER */
|
||||||
|
|
||||||
|
|
|
@ -252,11 +252,11 @@ const char js_parseInt_str[] = "parseInt";
|
||||||
#ifdef JS_TRACER
|
#ifdef JS_TRACER
|
||||||
|
|
||||||
JS_DEFINE_TRCINFO_2(num_parseInt,
|
JS_DEFINE_TRCINFO_2(num_parseInt,
|
||||||
(2, (static, DOUBLE, ParseInt, CONTEXT, STRING, 1, nanojit::ACC_NONE)),
|
(2, (static, DOUBLE, ParseInt, CONTEXT, STRING, 1, nanojit::ACCSET_NONE)),
|
||||||
(1, (static, DOUBLE, ParseIntDouble, DOUBLE, 1, nanojit::ACC_NONE)))
|
(1, (static, DOUBLE, ParseIntDouble, DOUBLE, 1, nanojit::ACCSET_NONE)))
|
||||||
|
|
||||||
JS_DEFINE_TRCINFO_1(num_parseFloat,
|
JS_DEFINE_TRCINFO_1(num_parseFloat,
|
||||||
(2, (static, DOUBLE, ParseFloat, CONTEXT, STRING, 1, nanojit::ACC_NONE)))
|
(2, (static, DOUBLE, ParseFloat, CONTEXT, STRING, 1, nanojit::ACCSET_NONE)))
|
||||||
|
|
||||||
#endif /* JS_TRACER */
|
#endif /* JS_TRACER */
|
||||||
|
|
||||||
|
@ -598,10 +598,10 @@ num_toPrecision(JSContext *cx, uintN argc, Value *vp)
|
||||||
#ifdef JS_TRACER
|
#ifdef JS_TRACER
|
||||||
|
|
||||||
JS_DEFINE_TRCINFO_2(num_toString,
|
JS_DEFINE_TRCINFO_2(num_toString,
|
||||||
(2, (extern, STRING_RETRY, js_NumberToString, CONTEXT, THIS_DOUBLE, 1,
|
(2, (extern, STRING_RETRY, js_NumberToString, CONTEXT, THIS_DOUBLE,
|
||||||
nanojit::ACC_NONE)),
|
1, nanojit::ACCSET_NONE)),
|
||||||
(3, (static, STRING_RETRY, js_NumberToStringWithBase, CONTEXT, THIS_DOUBLE, INT32, 1,
|
(3, (static, STRING_RETRY, js_NumberToStringWithBase, CONTEXT, THIS_DOUBLE, INT32,
|
||||||
nanojit::ACC_NONE)))
|
1, nanojit::ACCSET_NONE)))
|
||||||
|
|
||||||
#endif /* JS_TRACER */
|
#endif /* JS_TRACER */
|
||||||
|
|
||||||
|
|
|
@ -2659,7 +2659,7 @@ js_Object_tn(JSContext* cx, JSObject* proto)
|
||||||
|
|
||||||
JS_DEFINE_TRCINFO_1(js_Object,
|
JS_DEFINE_TRCINFO_1(js_Object,
|
||||||
(2, (extern, CONSTRUCTOR_RETRY, js_Object_tn, CONTEXT, CALLEE_PROTOTYPE, 0,
|
(2, (extern, CONSTRUCTOR_RETRY, js_Object_tn, CONTEXT, CALLEE_PROTOTYPE, 0,
|
||||||
nanojit::ACC_STORE_ANY)))
|
nanojit::ACCSET_STORE_ANY)))
|
||||||
|
|
||||||
JSObject* FASTCALL
|
JSObject* FASTCALL
|
||||||
js_NonEmptyObject(JSContext* cx, JSObject* proto)
|
js_NonEmptyObject(JSContext* cx, JSObject* proto)
|
||||||
|
@ -2684,7 +2684,7 @@ js_NonEmptyObject(JSContext* cx, JSObject* proto)
|
||||||
}
|
}
|
||||||
|
|
||||||
JS_DEFINE_CALLINFO_2(extern, CONSTRUCTOR_RETRY, js_NonEmptyObject, CONTEXT, CALLEE_PROTOTYPE, 0,
|
JS_DEFINE_CALLINFO_2(extern, CONSTRUCTOR_RETRY, js_NonEmptyObject, CONTEXT, CALLEE_PROTOTYPE, 0,
|
||||||
nanojit::ACC_STORE_ANY)
|
nanojit::ACCSET_STORE_ANY)
|
||||||
|
|
||||||
JSObject* FASTCALL
|
JSObject* FASTCALL
|
||||||
js_NewInstance(JSContext *cx, Class *clasp, JSObject *ctor)
|
js_NewInstance(JSContext *cx, Class *clasp, JSObject *ctor)
|
||||||
|
@ -2744,7 +2744,7 @@ js_NewInstance(JSContext *cx, Class *clasp, JSObject *ctor)
|
||||||
}
|
}
|
||||||
|
|
||||||
JS_DEFINE_CALLINFO_3(extern, CONSTRUCTOR_RETRY, js_NewInstance, CONTEXT, CLASS, OBJECT, 0,
|
JS_DEFINE_CALLINFO_3(extern, CONSTRUCTOR_RETRY, js_NewInstance, CONTEXT, CLASS, OBJECT, 0,
|
||||||
nanojit::ACC_STORE_ANY)
|
nanojit::ACCSET_STORE_ANY)
|
||||||
|
|
||||||
#else /* !JS_TRACER */
|
#else /* !JS_TRACER */
|
||||||
|
|
||||||
|
|
|
@ -74,7 +74,7 @@ class RecursiveSlotMap : public SlotMap
|
||||||
ptrdiff_t retOffset = downPostSlots * sizeof(double) -
|
ptrdiff_t retOffset = downPostSlots * sizeof(double) -
|
||||||
mRecorder.tree->nativeStackBase;
|
mRecorder.tree->nativeStackBase;
|
||||||
mRecorder.lir->insStore(mRecorder.addName(rval_ins, "rval_ins"),
|
mRecorder.lir->insStore(mRecorder.addName(rval_ins, "rval_ins"),
|
||||||
mRecorder.lirbuf->sp, retOffset, ACC_STACK);
|
mRecorder.lirbuf->sp, retOffset, ACCSET_STACK);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -111,14 +111,14 @@ class UpRecursiveSlotMap : public RecursiveSlotMap
|
||||||
* This makes sense because this slot is just above the highest sp for
|
* This makes sense because this slot is just above the highest sp for
|
||||||
* the down frame.
|
* the down frame.
|
||||||
*/
|
*/
|
||||||
lir->insStore(rval_ins, lirbuf->sp, -mRecorder.tree->nativeStackBase, ACC_STACK);
|
lir->insStore(rval_ins, lirbuf->sp, -mRecorder.tree->nativeStackBase, ACCSET_STACK);
|
||||||
|
|
||||||
lirbuf->sp = lir->ins2(LIR_addp, lirbuf->sp,
|
lirbuf->sp = lir->ins2(LIR_addp, lirbuf->sp,
|
||||||
lir->insImmWord(-int(downPostSlots) * sizeof(double)));
|
lir->insImmWord(-int(downPostSlots) * sizeof(double)));
|
||||||
lir->insStore(lirbuf->sp, lirbuf->state, offsetof(TracerState, sp), ACC_OTHER);
|
lir->insStore(lirbuf->sp, lirbuf->state, offsetof(TracerState, sp), ACCSET_OTHER);
|
||||||
lirbuf->rp = lir->ins2(LIR_addp, lirbuf->rp,
|
lirbuf->rp = lir->ins2(LIR_addp, lirbuf->rp,
|
||||||
lir->insImmWord(-int(sizeof(FrameInfo*))));
|
lir->insImmWord(-int(sizeof(FrameInfo*))));
|
||||||
lir->insStore(lirbuf->rp, lirbuf->state, offsetof(TracerState, rp), ACC_OTHER);
|
lir->insStore(lirbuf->rp, lirbuf->state, offsetof(TracerState, rp), ACCSET_OTHER);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -300,7 +300,7 @@ TraceRecorder::upRecursion()
|
||||||
lir->ins2(LIR_gep, lirbuf->rp,
|
lir->ins2(LIR_gep, lirbuf->rp,
|
||||||
lir->ins2(LIR_addp,
|
lir->ins2(LIR_addp,
|
||||||
lir->insLoad(LIR_ldp, lirbuf->state,
|
lir->insLoad(LIR_ldp, lirbuf->state,
|
||||||
offsetof(TracerState, sor), ACC_OTHER),
|
offsetof(TracerState, sor), ACCSET_OTHER),
|
||||||
INS_CONSTWORD(sizeof(FrameInfo*)))),
|
INS_CONSTWORD(sizeof(FrameInfo*)))),
|
||||||
exit);
|
exit);
|
||||||
}
|
}
|
||||||
|
@ -309,7 +309,7 @@ TraceRecorder::upRecursion()
|
||||||
|
|
||||||
/* Guard that the FrameInfo above is the same FrameInfo pointer. */
|
/* Guard that the FrameInfo above is the same FrameInfo pointer. */
|
||||||
VMSideExit* exit = snapshot(RECURSIVE_MISMATCH_EXIT);
|
VMSideExit* exit = snapshot(RECURSIVE_MISMATCH_EXIT);
|
||||||
LIns* prev_rp = lir->insLoad(LIR_ldp, lirbuf->rp, -int32_t(sizeof(FrameInfo*)), ACC_RSTACK);
|
LIns* prev_rp = lir->insLoad(LIR_ldp, lirbuf->rp, -int32_t(sizeof(FrameInfo*)), ACCSET_RSTACK);
|
||||||
guard(true, lir->ins2(LIR_eqp, prev_rp, INS_CONSTPTR(fi)), exit);
|
guard(true, lir->ins2(LIR_eqp, prev_rp, INS_CONSTPTR(fi)), exit);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -399,7 +399,7 @@ TraceRecorder::slurpDownFrames(jsbytecode* return_pc)
|
||||||
|
|
||||||
FrameRegsIter i(cx);
|
FrameRegsIter i(cx);
|
||||||
LIns* fp_ins =
|
LIns* fp_ins =
|
||||||
addName(lir->insLoad(LIR_ldp, cx_ins, offsetof(JSContext, fp), ACC_OTHER), "fp");
|
addName(lir->insLoad(LIR_ldp, cx_ins, offsetof(JSContext, fp), ACCSET_OTHER), "fp");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* When first emitting slurp code, do so against the down frame. After
|
* When first emitting slurp code, do so against the down frame. After
|
||||||
|
@ -408,11 +408,11 @@ TraceRecorder::slurpDownFrames(jsbytecode* return_pc)
|
||||||
* anchoring off such an exit.
|
* anchoring off such an exit.
|
||||||
*/
|
*/
|
||||||
if (!anchor || anchor->exitType != RECURSIVE_SLURP_FAIL_EXIT) {
|
if (!anchor || anchor->exitType != RECURSIVE_SLURP_FAIL_EXIT) {
|
||||||
fp_ins = addName(lir->insLoad(LIR_ldp, fp_ins, offsetof(JSStackFrame, down), ACC_OTHER),
|
fp_ins = addName(lir->insLoad(LIR_ldp, fp_ins, offsetof(JSStackFrame, down), ACCSET_OTHER),
|
||||||
"downFp");
|
"downFp");
|
||||||
++i;
|
++i;
|
||||||
|
|
||||||
argv_ins = addName(lir->insLoad(LIR_ldp, fp_ins, offsetof(JSStackFrame, argv), ACC_OTHER),
|
argv_ins = addName(lir->insLoad(LIR_ldp, fp_ins, offsetof(JSStackFrame, argv), ACCSET_OTHER),
|
||||||
"argv");
|
"argv");
|
||||||
|
|
||||||
/* If recovering from a SLURP_MISMATCH, all of this is unnecessary. */
|
/* If recovering from a SLURP_MISMATCH, all of this is unnecessary. */
|
||||||
|
@ -432,7 +432,7 @@ TraceRecorder::slurpDownFrames(jsbytecode* return_pc)
|
||||||
guard(true,
|
guard(true,
|
||||||
lir->ins2(LIR_eqp,
|
lir->ins2(LIR_eqp,
|
||||||
addName(lir->insLoad(LIR_ldp, fp_ins,
|
addName(lir->insLoad(LIR_ldp, fp_ins,
|
||||||
offsetof(JSStackFrame, script), ACC_OTHER),
|
offsetof(JSStackFrame, script), ACCSET_OTHER),
|
||||||
"script"),
|
"script"),
|
||||||
INS_CONSTPTR(cx->fp->down->script)),
|
INS_CONSTPTR(cx->fp->down->script)),
|
||||||
RECURSIVE_LOOP_EXIT);
|
RECURSIVE_LOOP_EXIT);
|
||||||
|
@ -442,7 +442,7 @@ TraceRecorder::slurpDownFrames(jsbytecode* return_pc)
|
||||||
guard(true,
|
guard(true,
|
||||||
lir->ins2(LIR_eqp,
|
lir->ins2(LIR_eqp,
|
||||||
addName(lir->insLoad(LIR_ldp, fp_ins, offsetof(JSStackFrame, savedPC),
|
addName(lir->insLoad(LIR_ldp, fp_ins, offsetof(JSStackFrame, savedPC),
|
||||||
ACC_OTHER),
|
ACCSET_OTHER),
|
||||||
"savedPC"),
|
"savedPC"),
|
||||||
INS_CONSTPTR(return_pc)),
|
INS_CONSTPTR(return_pc)),
|
||||||
RECURSIVE_SLURP_MISMATCH_EXIT);
|
RECURSIVE_SLURP_MISMATCH_EXIT);
|
||||||
|
@ -451,7 +451,7 @@ TraceRecorder::slurpDownFrames(jsbytecode* return_pc)
|
||||||
guard(true,
|
guard(true,
|
||||||
lir->ins2(LIR_eqi,
|
lir->ins2(LIR_eqi,
|
||||||
addName(lir->insLoad(LIR_ldi, fp_ins, offsetof(JSStackFrame, argc),
|
addName(lir->insLoad(LIR_ldi, fp_ins, offsetof(JSStackFrame, argc),
|
||||||
ACC_OTHER),
|
ACCSET_OTHER),
|
||||||
"argc"),
|
"argc"),
|
||||||
INS_CONST(cx->fp->argc)),
|
INS_CONST(cx->fp->argc)),
|
||||||
MISMATCH_EXIT);
|
MISMATCH_EXIT);
|
||||||
|
@ -465,7 +465,7 @@ TraceRecorder::slurpDownFrames(jsbytecode* return_pc)
|
||||||
frameDepth = 1;
|
frameDepth = 1;
|
||||||
} else {
|
} else {
|
||||||
/* Note: loading argv from fp, not fp->down. */
|
/* Note: loading argv from fp, not fp->down. */
|
||||||
argv_ins = addName(lir->insLoad(LIR_ldp, fp_ins, offsetof(JSStackFrame, argv), ACC_OTHER),
|
argv_ins = addName(lir->insLoad(LIR_ldp, fp_ins, offsetof(JSStackFrame, argv), ACCSET_OTHER),
|
||||||
"argv");
|
"argv");
|
||||||
|
|
||||||
/* Slots for this frame, minus the return value. */
|
/* Slots for this frame, minus the return value. */
|
||||||
|
@ -552,23 +552,23 @@ TraceRecorder::slurpDownFrames(jsbytecode* return_pc)
|
||||||
* The return value must be written out early, before slurping can fail,
|
* The return value must be written out early, before slurping can fail,
|
||||||
* otherwise it will not be available when there's a type mismatch.
|
* otherwise it will not be available when there's a type mismatch.
|
||||||
*/
|
*/
|
||||||
lir->insStore(rval_ins, lirbuf->sp, offset, ACC_STACK);
|
lir->insStore(rval_ins, lirbuf->sp, offset, ACCSET_STACK);
|
||||||
} else {
|
} else {
|
||||||
switch (returnType)
|
switch (returnType)
|
||||||
{
|
{
|
||||||
case JSVAL_TYPE_BOOLEAN:
|
case JSVAL_TYPE_BOOLEAN:
|
||||||
case JSVAL_TYPE_UNDEFINED:
|
case JSVAL_TYPE_UNDEFINED:
|
||||||
case JSVAL_TYPE_INT32:
|
case JSVAL_TYPE_INT32:
|
||||||
rval_ins = lir->insLoad(LIR_ldi, lirbuf->sp, offset, ACC_STACK);
|
rval_ins = lir->insLoad(LIR_ldi, lirbuf->sp, offset, ACCSET_STACK);
|
||||||
break;
|
break;
|
||||||
case JSVAL_TYPE_DOUBLE:
|
case JSVAL_TYPE_DOUBLE:
|
||||||
rval_ins = lir->insLoad(LIR_ldd, lirbuf->sp, offset, ACC_STACK);
|
rval_ins = lir->insLoad(LIR_ldd, lirbuf->sp, offset, ACCSET_STACK);
|
||||||
break;
|
break;
|
||||||
case JSVAL_TYPE_FUNOBJ:
|
case JSVAL_TYPE_FUNOBJ:
|
||||||
case JSVAL_TYPE_NONFUNOBJ:
|
case JSVAL_TYPE_NONFUNOBJ:
|
||||||
case JSVAL_TYPE_STRING:
|
case JSVAL_TYPE_STRING:
|
||||||
case JSVAL_TYPE_NULL:
|
case JSVAL_TYPE_NULL:
|
||||||
rval_ins = lir->insLoad(LIR_ldp, lirbuf->sp, offset, ACC_STACK);
|
rval_ins = lir->insLoad(LIR_ldp, lirbuf->sp, offset, ACCSET_STACK);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
JS_NOT_REACHED("unknown type");
|
JS_NOT_REACHED("unknown type");
|
||||||
|
@ -706,9 +706,9 @@ TraceRecorder::downRecursion()
|
||||||
|
|
||||||
/* Add space for a new JIT frame. */
|
/* Add space for a new JIT frame. */
|
||||||
lirbuf->sp = lir->ins2(LIR_addp, lirbuf->sp, lir->insImmWord(slots * sizeof(double)));
|
lirbuf->sp = lir->ins2(LIR_addp, lirbuf->sp, lir->insImmWord(slots * sizeof(double)));
|
||||||
lir->insStore(lirbuf->sp, lirbuf->state, offsetof(TracerState, sp), ACC_OTHER);
|
lir->insStore(lirbuf->sp, lirbuf->state, offsetof(TracerState, sp), ACCSET_OTHER);
|
||||||
lirbuf->rp = lir->ins2(LIR_addp, lirbuf->rp, lir->insImmWord(sizeof(FrameInfo*)));
|
lirbuf->rp = lir->ins2(LIR_addp, lirbuf->rp, lir->insImmWord(sizeof(FrameInfo*)));
|
||||||
lir->insStore(lirbuf->rp, lirbuf->state, offsetof(TracerState, rp), ACC_OTHER);
|
lir->insStore(lirbuf->rp, lirbuf->state, offsetof(TracerState, rp), ACCSET_OTHER);
|
||||||
--callDepth;
|
--callDepth;
|
||||||
clearCurrentFrameSlotsFromTracker(nativeFrameTracker);
|
clearCurrentFrameSlotsFromTracker(nativeFrameTracker);
|
||||||
|
|
||||||
|
@ -737,42 +737,42 @@ TraceRecorder::downRecursion()
|
||||||
JS_REQUIRES_STACK inline LIns*
|
JS_REQUIRES_STACK inline LIns*
|
||||||
TraceRecorder::slurpDoubleSlot(LIns* addr_ins, ptrdiff_t offset, VMSideExit* exit)
|
TraceRecorder::slurpDoubleSlot(LIns* addr_ins, ptrdiff_t offset, VMSideExit* exit)
|
||||||
{
|
{
|
||||||
LIns* tag_ins = lir->insLoad(LIR_ldi, addr_ins, offset + sTagOffset, ACC_OTHER);
|
LIns* tag_ins = lir->insLoad(LIR_ldi, addr_ins, offset + sTagOffset, ACCSET_OTHER);
|
||||||
return unbox_number_as_double(addr_ins, offset, tag_ins, exit, ACC_OTHER);
|
return unbox_number_as_double(addr_ins, offset, tag_ins, exit, ACCSET_OTHER);
|
||||||
}
|
}
|
||||||
|
|
||||||
JS_REQUIRES_STACK LIns*
|
JS_REQUIRES_STACK LIns*
|
||||||
TraceRecorder::slurpObjectSlot(LIns* addr_ins, ptrdiff_t offset, JSValueType type, VMSideExit* exit)
|
TraceRecorder::slurpObjectSlot(LIns* addr_ins, ptrdiff_t offset, JSValueType type, VMSideExit* exit)
|
||||||
{
|
{
|
||||||
LIns* tag_ins = lir->insLoad(LIR_ldi, addr_ins, offset + sTagOffset, ACC_OTHER);
|
LIns* tag_ins = lir->insLoad(LIR_ldi, addr_ins, offset + sTagOffset, ACCSET_OTHER);
|
||||||
return unbox_object(addr_ins, offset, tag_ins, type, exit, ACC_OTHER);
|
return unbox_object(addr_ins, offset, tag_ins, type, exit, ACCSET_OTHER);
|
||||||
}
|
}
|
||||||
|
|
||||||
JS_REQUIRES_STACK inline LIns*
|
JS_REQUIRES_STACK inline LIns*
|
||||||
TraceRecorder::slurpNonDoubleObjectSlot(LIns* addr_ins, ptrdiff_t offset, JSValueType type, VMSideExit* exit)
|
TraceRecorder::slurpNonDoubleObjectSlot(LIns* addr_ins, ptrdiff_t offset, JSValueType type, VMSideExit* exit)
|
||||||
{
|
{
|
||||||
LIns* tag_ins = lir->insLoad(LIR_ldi, addr_ins, offset + sTagOffset, ACC_OTHER);
|
LIns* tag_ins = lir->insLoad(LIR_ldi, addr_ins, offset + sTagOffset, ACCSET_OTHER);
|
||||||
return unbox_non_double_object(addr_ins, offset, tag_ins, type, exit, ACC_OTHER);
|
return unbox_non_double_object(addr_ins, offset, tag_ins, type, exit, ACCSET_OTHER);
|
||||||
}
|
}
|
||||||
#elif JS_BITS_PER_WORD == 64
|
#elif JS_BITS_PER_WORD == 64
|
||||||
JS_REQUIRES_STACK inline LIns*
|
JS_REQUIRES_STACK inline LIns*
|
||||||
TraceRecorder::slurpDoubleSlot(LIns* addr_ins, ptrdiff_t offset, VMSideExit* exit)
|
TraceRecorder::slurpDoubleSlot(LIns* addr_ins, ptrdiff_t offset, VMSideExit* exit)
|
||||||
{
|
{
|
||||||
LIns* v_ins = lir->insLoad(LIR_ldq, addr_ins, offset, ACC_OTHER);
|
LIns* v_ins = lir->insLoad(LIR_ldq, addr_ins, offset, ACCSET_OTHER);
|
||||||
return unbox_number_as_double(v_ins, exit);
|
return unbox_number_as_double(v_ins, exit);
|
||||||
}
|
}
|
||||||
|
|
||||||
JS_REQUIRES_STACK LIns*
|
JS_REQUIRES_STACK LIns*
|
||||||
TraceRecorder::slurpObjectSlot(LIns* addr_ins, ptrdiff_t offset, JSValueType type, VMSideExit* exit)
|
TraceRecorder::slurpObjectSlot(LIns* addr_ins, ptrdiff_t offset, JSValueType type, VMSideExit* exit)
|
||||||
{
|
{
|
||||||
LIns* v_ins = lir->insLoad(LIR_ldq, addr_ins, offset, ACC_OTHER);
|
LIns* v_ins = lir->insLoad(LIR_ldq, addr_ins, offset, ACCSET_OTHER);
|
||||||
return unbox_object(v_ins, type, exit);
|
return unbox_object(v_ins, type, exit);
|
||||||
}
|
}
|
||||||
|
|
||||||
JS_REQUIRES_STACK inline LIns*
|
JS_REQUIRES_STACK inline LIns*
|
||||||
TraceRecorder::slurpNonDoubleObjectSlot(LIns* addr_ins, ptrdiff_t offset, JSValueType type, VMSideExit* exit)
|
TraceRecorder::slurpNonDoubleObjectSlot(LIns* addr_ins, ptrdiff_t offset, JSValueType type, VMSideExit* exit)
|
||||||
{
|
{
|
||||||
LIns* v_ins = lir->insLoad(LIR_ldq, addr_ins, offset, ACC_OTHER);
|
LIns* v_ins = lir->insLoad(LIR_ldq, addr_ins, offset, ACCSET_OTHER);
|
||||||
return unbox_non_double_object(v_ins, type, exit);
|
return unbox_non_double_object(v_ins, type, exit);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -809,7 +809,7 @@ TraceRecorder::slurpSlot(LIns* addr_ins, ptrdiff_t offset, Value* vp, SlurpInfo*
|
||||||
lir->insStore(val,
|
lir->insStore(val,
|
||||||
lirbuf->sp,
|
lirbuf->sp,
|
||||||
-tree->nativeStackBase + ptrdiff_t(info->curSlot) * sizeof(double),
|
-tree->nativeStackBase + ptrdiff_t(info->curSlot) * sizeof(double),
|
||||||
ACC_STACK);
|
ACCSET_STACK);
|
||||||
info->curSlot++;
|
info->curSlot++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -831,7 +831,7 @@ TraceRecorder::slurpFrameObjPtrSlot(LIns* addr_ins, ptrdiff_t offset, JSObject**
|
||||||
anchor->slurpType != exit->slurpType);
|
anchor->slurpType != exit->slurpType);
|
||||||
|
|
||||||
LIns *val;
|
LIns *val;
|
||||||
LIns *ptr_val = lir->insLoad(LIR_ldp, addr_ins, offset, ACC_OTHER);
|
LIns *ptr_val = lir->insLoad(LIR_ldp, addr_ins, offset, ACCSET_OTHER);
|
||||||
LIns *ptr_is_null_ins = lir->insEqP_0(ptr_val);
|
LIns *ptr_is_null_ins = lir->insEqP_0(ptr_val);
|
||||||
if (exit->slurpType == JSVAL_TYPE_NULL) {
|
if (exit->slurpType == JSVAL_TYPE_NULL) {
|
||||||
guard(true, ptr_is_null_ins, exit);
|
guard(true, ptr_is_null_ins, exit);
|
||||||
|
@ -845,6 +845,6 @@ TraceRecorder::slurpFrameObjPtrSlot(LIns* addr_ins, ptrdiff_t offset, JSObject**
|
||||||
lir->insStore(val,
|
lir->insStore(val,
|
||||||
lirbuf->sp,
|
lirbuf->sp,
|
||||||
-tree->nativeStackBase + ptrdiff_t(info->curSlot) * sizeof(double),
|
-tree->nativeStackBase + ptrdiff_t(info->curSlot) * sizeof(double),
|
||||||
ACC_STACK);
|
ACCSET_STACK);
|
||||||
info->curSlot++;
|
info->curSlot++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2385,7 +2385,7 @@ class RegExpNativeCompiler {
|
||||||
LIns* to_fail = lir->insBranch(LIR_jf, lir->ins2(LIR_ltp, pos, cpend), 0);
|
LIns* to_fail = lir->insBranch(LIR_jf, lir->ins2(LIR_ltp, pos, cpend), 0);
|
||||||
if (!fails.append(to_fail))
|
if (!fails.append(to_fail))
|
||||||
return NULL;
|
return NULL;
|
||||||
LIns* text_ch = lir->insLoad(LIR_ldus2ui, pos, 0, ACC_READONLY);
|
LIns* text_ch = lir->insLoad(LIR_ldus2ui, pos, 0, ACCSET_OTHER, LOAD_CONST);
|
||||||
|
|
||||||
// Extra characters that need to be compared against when doing folding.
|
// Extra characters that need to be compared against when doing folding.
|
||||||
struct extra {
|
struct extra {
|
||||||
|
@ -2524,7 +2524,7 @@ class RegExpNativeCompiler {
|
||||||
0);
|
0);
|
||||||
if (!fails.append(to_fail))
|
if (!fails.append(to_fail))
|
||||||
return NULL;
|
return NULL;
|
||||||
LIns* text_word = lir->insLoad(LIR_ldi, pos, 0, ACC_OTHER);
|
LIns* text_word = lir->insLoad(LIR_ldi, pos, 0, ACCSET_OTHER);
|
||||||
LIns* comp_word = useFastCI ?
|
LIns* comp_word = useFastCI ?
|
||||||
lir->ins2(LIR_ori, text_word, lir->insImmI(mask.i)) :
|
lir->ins2(LIR_ori, text_word, lir->insImmI(mask.i)) :
|
||||||
text_word;
|
text_word;
|
||||||
|
@ -2606,7 +2606,7 @@ class RegExpNativeCompiler {
|
||||||
LIns* to_fail = lir->insBranch(LIR_jf, lir->ins2(LIR_ltp, pos, cpend), 0);
|
LIns* to_fail = lir->insBranch(LIR_jf, lir->ins2(LIR_ltp, pos, cpend), 0);
|
||||||
if (!fails.append(to_fail))
|
if (!fails.append(to_fail))
|
||||||
return NULL;
|
return NULL;
|
||||||
LIns* text_ch = lir->insLoad(LIR_ldus2ui, pos, 0, ACC_READONLY);
|
LIns* text_ch = lir->insLoad(LIR_ldus2ui, pos, 0, ACCSET_OTHER, LOAD_CONST);
|
||||||
if (!fails.append(lir->insBranch(LIR_jf,
|
if (!fails.append(lir->insBranch(LIR_jf,
|
||||||
lir->ins2(LIR_lei, text_ch, lir->insImmI(charSet->length)),
|
lir->ins2(LIR_lei, text_ch, lir->insImmI(charSet->length)),
|
||||||
0))) {
|
0))) {
|
||||||
|
@ -2615,7 +2615,7 @@ class RegExpNativeCompiler {
|
||||||
LIns* byteIndex = lir->insI2P(lir->ins2(LIR_rshi, text_ch, lir->insImmI(3)));
|
LIns* byteIndex = lir->insI2P(lir->ins2(LIR_rshi, text_ch, lir->insImmI(3)));
|
||||||
LIns* bitmap = lir->insImmP(bitmapData);
|
LIns* bitmap = lir->insImmP(bitmapData);
|
||||||
LIns* byte = lir->insLoad(LIR_lduc2ui, lir->ins2(LIR_addp, bitmap, byteIndex), (int) 0,
|
LIns* byte = lir->insLoad(LIR_lduc2ui, lir->ins2(LIR_addp, bitmap, byteIndex), (int) 0,
|
||||||
ACC_READONLY);
|
ACCSET_OTHER, LOAD_CONST);
|
||||||
LIns* bitMask = lir->ins2(LIR_lshi, lir->insImmI(1),
|
LIns* bitMask = lir->ins2(LIR_lshi, lir->insImmI(1),
|
||||||
lir->ins2(LIR_andi, text_ch, lir->insImmI(0x7)));
|
lir->ins2(LIR_andi, text_ch, lir->insImmI(0x7)));
|
||||||
LIns* test = lir->ins2(LIR_eqi, lir->ins2(LIR_andi, byte, bitMask), lir->insImmI(0));
|
LIns* test = lir->ins2(LIR_eqi, lir->ins2(LIR_andi, byte, bitMask), lir->insImmI(0));
|
||||||
|
@ -2634,7 +2634,7 @@ class RegExpNativeCompiler {
|
||||||
chr = lir->ins2(LIR_lshi, chr, sizeLog2);
|
chr = lir->ins2(LIR_lshi, chr, sizeLog2);
|
||||||
}
|
}
|
||||||
LIns *addr = lir->ins2(LIR_addp, lir->insImmP(tbl), lir->insUI2P(chr));
|
LIns *addr = lir->ins2(LIR_addp, lir->insImmP(tbl), lir->insUI2P(chr));
|
||||||
return lir->insLoad(LIR_lduc2ui, addr, 0, ACC_READONLY);
|
return lir->insLoad(LIR_lduc2ui, addr, 0, ACCSET_OTHER, LOAD_CONST);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Compile a builtin character class. */
|
/* Compile a builtin character class. */
|
||||||
|
@ -2643,7 +2643,7 @@ class RegExpNativeCompiler {
|
||||||
/* All the builtins checked below consume one character. */
|
/* All the builtins checked below consume one character. */
|
||||||
if (!fails.append(lir->insBranch(LIR_jf, lir->ins2(LIR_ltp, pos, cpend), 0)))
|
if (!fails.append(lir->insBranch(LIR_jf, lir->ins2(LIR_ltp, pos, cpend), 0)))
|
||||||
return NULL;
|
return NULL;
|
||||||
LIns *chr = lir->insLoad(LIR_ldus2ui, pos, 0, ACC_READONLY);
|
LIns *chr = lir->insLoad(LIR_ldus2ui, pos, 0, ACCSET_OTHER, LOAD_CONST);
|
||||||
|
|
||||||
switch (node->op) {
|
switch (node->op) {
|
||||||
case REOP_DOT:
|
case REOP_DOT:
|
||||||
|
@ -2868,7 +2868,7 @@ class RegExpNativeCompiler {
|
||||||
* memory (REGlobalData::stateStack, since it is unused).
|
* memory (REGlobalData::stateStack, since it is unused).
|
||||||
*/
|
*/
|
||||||
lir->insStore(branchEnd, state,
|
lir->insStore(branchEnd, state,
|
||||||
offsetof(REGlobalData, stateStack), ACC_OTHER);
|
offsetof(REGlobalData, stateStack), ACCSET_OTHER);
|
||||||
LIns *leftSuccess = lir->insBranch(LIR_j, NULL, NULL);
|
LIns *leftSuccess = lir->insBranch(LIR_j, NULL, NULL);
|
||||||
|
|
||||||
/* Try right branch. */
|
/* Try right branch. */
|
||||||
|
@ -2876,12 +2876,12 @@ class RegExpNativeCompiler {
|
||||||
if (!(branchEnd = compileNode(rightRe, pos, atEnd, fails)))
|
if (!(branchEnd = compileNode(rightRe, pos, atEnd, fails)))
|
||||||
return NULL;
|
return NULL;
|
||||||
lir->insStore(branchEnd, state,
|
lir->insStore(branchEnd, state,
|
||||||
offsetof(REGlobalData, stateStack), ACC_OTHER);
|
offsetof(REGlobalData, stateStack), ACCSET_OTHER);
|
||||||
|
|
||||||
/* Land success on the left branch. */
|
/* Land success on the left branch. */
|
||||||
targetCurrentPoint(leftSuccess);
|
targetCurrentPoint(leftSuccess);
|
||||||
return addName(fragment->lirbuf,
|
return addName(fragment->lirbuf,
|
||||||
lir->insLoad(LIR_ldp, state, offsetof(REGlobalData, stateStack), ACC_OTHER),
|
lir->insLoad(LIR_ldp, state, offsetof(REGlobalData, stateStack), ACCSET_OTHER),
|
||||||
"pos");
|
"pos");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2891,18 +2891,18 @@ class RegExpNativeCompiler {
|
||||||
* Since there are no phis, simulate by writing to and reading from
|
* Since there are no phis, simulate by writing to and reading from
|
||||||
* memory (REGlobalData::stateStack, since it is unused).
|
* memory (REGlobalData::stateStack, since it is unused).
|
||||||
*/
|
*/
|
||||||
lir->insStore(pos, state, offsetof(REGlobalData, stateStack), ACC_OTHER);
|
lir->insStore(pos, state, offsetof(REGlobalData, stateStack), ACCSET_OTHER);
|
||||||
|
|
||||||
/* Try ? body. */
|
/* Try ? body. */
|
||||||
LInsList kidFails(cx);
|
LInsList kidFails(cx);
|
||||||
if (!(pos = compileNode(node, pos, atEnd, kidFails)))
|
if (!(pos = compileNode(node, pos, atEnd, kidFails)))
|
||||||
return NULL;
|
return NULL;
|
||||||
lir->insStore(pos, state, offsetof(REGlobalData, stateStack), ACC_OTHER);
|
lir->insStore(pos, state, offsetof(REGlobalData, stateStack), ACCSET_OTHER);
|
||||||
|
|
||||||
/* Join success and failure and get new position. */
|
/* Join success and failure and get new position. */
|
||||||
targetCurrentPoint(kidFails);
|
targetCurrentPoint(kidFails);
|
||||||
pos = addName(fragment->lirbuf,
|
pos = addName(fragment->lirbuf,
|
||||||
lir->insLoad(LIR_ldp, state, offsetof(REGlobalData, stateStack), ACC_OTHER),
|
lir->insLoad(LIR_ldp, state, offsetof(REGlobalData, stateStack), ACCSET_OTHER),
|
||||||
"pos");
|
"pos");
|
||||||
|
|
||||||
return pos;
|
return pos;
|
||||||
|
@ -2957,13 +2957,13 @@ class RegExpNativeCompiler {
|
||||||
* Since there are no phis, simulate by writing to and reading from
|
* Since there are no phis, simulate by writing to and reading from
|
||||||
* memory (REGlobalData::stateStack, since it is unused).
|
* memory (REGlobalData::stateStack, since it is unused).
|
||||||
*/
|
*/
|
||||||
lir->insStore(pos, state, offsetof(REGlobalData, stateStack), ACC_OTHER);
|
lir->insStore(pos, state, offsetof(REGlobalData, stateStack), ACCSET_OTHER);
|
||||||
|
|
||||||
/* Begin iteration: load loop variables. */
|
/* Begin iteration: load loop variables. */
|
||||||
LIns *loopTop = lir->ins0(LIR_label);
|
LIns *loopTop = lir->ins0(LIR_label);
|
||||||
LIns *iterBegin = addName(fragment->lirbuf,
|
LIns *iterBegin = addName(fragment->lirbuf,
|
||||||
lir->insLoad(LIR_ldp, state,
|
lir->insLoad(LIR_ldp, state,
|
||||||
offsetof(REGlobalData, stateStack), ACC_OTHER),
|
offsetof(REGlobalData, stateStack), ACCSET_OTHER),
|
||||||
"pos");
|
"pos");
|
||||||
|
|
||||||
/* Match quantifier body. */
|
/* Match quantifier body. */
|
||||||
|
@ -2983,7 +2983,7 @@ class RegExpNativeCompiler {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* End iteration: store loop variables, increment, jump */
|
/* End iteration: store loop variables, increment, jump */
|
||||||
lir->insStore(iterEnd, state, offsetof(REGlobalData, stateStack), ACC_OTHER);
|
lir->insStore(iterEnd, state, offsetof(REGlobalData, stateStack), ACCSET_OTHER);
|
||||||
lir->insBranch(LIR_j, NULL, loopTop);
|
lir->insBranch(LIR_j, NULL, loopTop);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -3081,7 +3081,7 @@ class RegExpNativeCompiler {
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* Fall-through from compileNode means success. */
|
/* Fall-through from compileNode means success. */
|
||||||
lir->insStore(pos, state, offsetof(REGlobalData, stateStack), ACC_OTHER);
|
lir->insStore(pos, state, offsetof(REGlobalData, stateStack), ACCSET_OTHER);
|
||||||
lir->ins0(LIR_regfence);
|
lir->ins0(LIR_regfence);
|
||||||
lir->ins1(LIR_reti, lir->insImmI(1));
|
lir->ins1(LIR_reti, lir->insImmI(1));
|
||||||
|
|
||||||
|
@ -3120,7 +3120,7 @@ class RegExpNativeCompiler {
|
||||||
|
|
||||||
/* Outer loop increment. */
|
/* Outer loop increment. */
|
||||||
lir->insStore(lir->ins2(LIR_addp, start, lir->insImmWord(2)), state,
|
lir->insStore(lir->ins2(LIR_addp, start, lir->insImmWord(2)), state,
|
||||||
offsetof(REGlobalData, skipped), ACC_OTHER);
|
offsetof(REGlobalData, skipped), ACCSET_OTHER);
|
||||||
|
|
||||||
return !outOfMemory();
|
return !outOfMemory();
|
||||||
}
|
}
|
||||||
|
@ -3176,7 +3176,7 @@ class RegExpNativeCompiler {
|
||||||
{
|
{
|
||||||
fragment->lirbuf = lirbuf;
|
fragment->lirbuf = lirbuf;
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
lirbuf->printer = new (tempAlloc) LInsPrinter(tempAlloc);
|
lirbuf->printer = new (tempAlloc) LInsPrinter(tempAlloc, TM_NUM_USED_ACCS);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3253,7 +3253,7 @@ class RegExpNativeCompiler {
|
||||||
})
|
})
|
||||||
|
|
||||||
start = addName(lirbuf,
|
start = addName(lirbuf,
|
||||||
lir->insLoad(LIR_ldp, state, offsetof(REGlobalData, skipped), ACC_OTHER),
|
lir->insLoad(LIR_ldp, state, offsetof(REGlobalData, skipped), ACCSET_OTHER),
|
||||||
"start");
|
"start");
|
||||||
|
|
||||||
if (cs->flags & JSREG_STICKY) {
|
if (cs->flags & JSREG_STICKY) {
|
||||||
|
@ -5832,7 +5832,7 @@ js_CloneRegExpObject(JSContext *cx, JSObject *obj, JSObject *proto)
|
||||||
|
|
||||||
#ifdef JS_TRACER
|
#ifdef JS_TRACER
|
||||||
JS_DEFINE_CALLINFO_3(extern, OBJECT, js_CloneRegExpObject, CONTEXT, OBJECT, OBJECT, 0,
|
JS_DEFINE_CALLINFO_3(extern, OBJECT, js_CloneRegExpObject, CONTEXT, OBJECT, OBJECT, 0,
|
||||||
ACC_STORE_ANY)
|
ACCSET_STORE_ANY)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
|
|
@ -1199,8 +1199,8 @@ js_String_p_charCodeAt_int_int(JSString* str, jsint i)
|
||||||
return 0;
|
return 0;
|
||||||
return str->chars()[i];
|
return str->chars()[i];
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_2(extern, INT32, js_String_p_charCodeAt_int_int, STRING, INT32, 1,
|
JS_DEFINE_CALLINFO_2(extern, INT32, js_String_p_charCodeAt_int_int, STRING, INT32,
|
||||||
nanojit::ACC_NONE)
|
1, nanojit::ACCSET_NONE)
|
||||||
|
|
||||||
int32 FASTCALL
|
int32 FASTCALL
|
||||||
js_String_p_charCodeAt_double_int(JSString* str, double d)
|
js_String_p_charCodeAt_double_int(JSString* str, double d)
|
||||||
|
@ -1210,8 +1210,8 @@ js_String_p_charCodeAt_double_int(JSString* str, double d)
|
||||||
return 0;
|
return 0;
|
||||||
return str->chars()[jsuint(d)];
|
return str->chars()[jsuint(d)];
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_2(extern, INT32, js_String_p_charCodeAt_double_int, STRING, DOUBLE, 1,
|
JS_DEFINE_CALLINFO_2(extern, INT32, js_String_p_charCodeAt_double_int, STRING, DOUBLE,
|
||||||
nanojit::ACC_NONE)
|
1, nanojit::ACCSET_NONE)
|
||||||
|
|
||||||
jsdouble FASTCALL
|
jsdouble FASTCALL
|
||||||
js_String_p_charCodeAt0(JSString* str)
|
js_String_p_charCodeAt0(JSString* str)
|
||||||
|
@ -1232,7 +1232,7 @@ js_String_p_charCodeAt0_int(JSString* str)
|
||||||
return 0;
|
return 0;
|
||||||
return str->chars()[0];
|
return str->chars()[0];
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_1(extern, INT32, js_String_p_charCodeAt0_int, STRING, 1, nanojit::ACC_NONE)
|
JS_DEFINE_CALLINFO_1(extern, INT32, js_String_p_charCodeAt0_int, STRING, 1, nanojit::ACCSET_NONE)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
jsint
|
jsint
|
||||||
|
@ -2848,19 +2848,19 @@ js_String_getelem(JSContext* cx, JSString* str, int32 i)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
JS_DEFINE_TRCINFO_1(js_str_toString,
|
JS_DEFINE_TRCINFO_1(js_str_toString,
|
||||||
(2, (extern, STRING_RETRY, String_p_toString, CONTEXT, THIS, 1,
|
(2, (extern, STRING_RETRY, String_p_toString, CONTEXT, THIS,
|
||||||
nanojit::ACC_NONE)))
|
1, nanojit::ACCSET_NONE)))
|
||||||
JS_DEFINE_TRCINFO_1(str_charAt,
|
JS_DEFINE_TRCINFO_1(str_charAt,
|
||||||
(3, (extern, STRING_RETRY, js_String_getelem, CONTEXT, THIS_STRING, INT32, 1,
|
(3, (extern, STRING_RETRY, js_String_getelem, CONTEXT, THIS_STRING, INT32,
|
||||||
nanojit::ACC_NONE)))
|
1, nanojit::ACCSET_NONE)))
|
||||||
JS_DEFINE_TRCINFO_2(str_charCodeAt,
|
JS_DEFINE_TRCINFO_2(str_charCodeAt,
|
||||||
(1, (extern, DOUBLE, js_String_p_charCodeAt0, THIS_STRING, 1,
|
(1, (extern, DOUBLE, js_String_p_charCodeAt0, THIS_STRING,
|
||||||
nanojit::ACC_NONE)),
|
1, nanojit::ACCSET_NONE)),
|
||||||
(2, (extern, DOUBLE, js_String_p_charCodeAt, THIS_STRING, DOUBLE, 1,
|
(2, (extern, DOUBLE, js_String_p_charCodeAt, THIS_STRING, DOUBLE,
|
||||||
nanojit::ACC_NONE)))
|
1, nanojit::ACCSET_NONE)))
|
||||||
JS_DEFINE_TRCINFO_1(str_concat,
|
JS_DEFINE_TRCINFO_1(str_concat,
|
||||||
(3, (extern, STRING_RETRY, js_ConcatStrings, CONTEXT, THIS_STRING, STRING, 1,
|
(3, (extern, STRING_RETRY, js_ConcatStrings, CONTEXT, THIS_STRING, STRING,
|
||||||
nanojit::ACC_NONE)))
|
1, nanojit::ACCSET_NONE)))
|
||||||
|
|
||||||
#define GENERIC JSFUN_GENERIC_NATIVE
|
#define GENERIC JSFUN_GENERIC_NATIVE
|
||||||
#define PRIMITIVE JSFUN_THISP_PRIMITIVE
|
#define PRIMITIVE JSFUN_THISP_PRIMITIVE
|
||||||
|
@ -3273,7 +3273,7 @@ js_String_tn(JSContext* cx, JSObject* proto, JSString* str)
|
||||||
return js_NewObjectWithClassProto(cx, &js_StringClass, proto, StringValue(str));
|
return js_NewObjectWithClassProto(cx, &js_StringClass, proto, StringValue(str));
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_3(extern, OBJECT, js_String_tn, CONTEXT, CALLEE_PROTOTYPE, STRING, 0,
|
JS_DEFINE_CALLINFO_3(extern, OBJECT, js_String_tn, CONTEXT, CALLEE_PROTOTYPE, STRING, 0,
|
||||||
nanojit::ACC_STORE_ANY)
|
nanojit::ACCSET_STORE_ANY)
|
||||||
|
|
||||||
#endif /* !JS_TRACER */
|
#endif /* !JS_TRACER */
|
||||||
|
|
||||||
|
@ -3334,7 +3334,7 @@ String_fromCharCode(JSContext* cx, int32 i)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
JS_DEFINE_TRCINFO_1(str_fromCharCode,
|
JS_DEFINE_TRCINFO_1(str_fromCharCode,
|
||||||
(2, (static, STRING_RETRY, String_fromCharCode, CONTEXT, INT32, 1, nanojit::ACC_NONE)))
|
(2, (static, STRING_RETRY, String_fromCharCode, CONTEXT, INT32, 1, nanojit::ACCSET_NONE)))
|
||||||
|
|
||||||
static JSFunctionSpec string_static_methods[] = {
|
static JSFunctionSpec string_static_methods[] = {
|
||||||
JS_TN("fromCharCode", str_fromCharCode, 1, 0, &str_fromCharCode_trcinfo),
|
JS_TN("fromCharCode", str_fromCharCode, 1, 0, &str_fromCharCode_trcinfo),
|
||||||
|
@ -3745,7 +3745,7 @@ js_EqualStrings(JSString *str1, JSString *str2)
|
||||||
|
|
||||||
return JS_TRUE;
|
return JS_TRUE;
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_2(extern, BOOL, js_EqualStrings, STRING, STRING, 1, nanojit::ACC_NONE)
|
JS_DEFINE_CALLINFO_2(extern, BOOL, js_EqualStrings, STRING, STRING, 1, nanojit::ACCSET_NONE)
|
||||||
|
|
||||||
int32 JS_FASTCALL
|
int32 JS_FASTCALL
|
||||||
js_CompareStrings(JSString *str1, JSString *str2)
|
js_CompareStrings(JSString *str1, JSString *str2)
|
||||||
|
@ -3771,7 +3771,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, nanojit::ACC_NONE)
|
JS_DEFINE_CALLINFO_2(extern, INT32, js_CompareStrings, STRING, STRING, 1, nanojit::ACCSET_NONE)
|
||||||
|
|
||||||
size_t
|
size_t
|
||||||
js_strlen(const jschar *s)
|
js_strlen(const jschar *s)
|
||||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -55,6 +55,22 @@
|
||||||
|
|
||||||
namespace js {
|
namespace js {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* TM-specific access regions:
|
||||||
|
*
|
||||||
|
* - STACK: the stack. STACK loads/stores always use 'sp' or 'sp+k' as the
|
||||||
|
* base pointer.
|
||||||
|
*
|
||||||
|
* - RSTACK: the return stack. RSTACK loads/stores always use 'rp' as the
|
||||||
|
* base pointer.
|
||||||
|
*
|
||||||
|
* - OTHER: all other regions of memory.
|
||||||
|
*/
|
||||||
|
static const nanojit::AccSet ACCSET_STACK = (1 << 0);
|
||||||
|
static const nanojit::AccSet ACCSET_RSTACK = (1 << 1);
|
||||||
|
static const nanojit::AccSet ACCSET_OTHER = (1 << 2);
|
||||||
|
static const uint8_t TM_NUM_USED_ACCS = 3; // number of access regions used by TraceMonkey
|
||||||
|
|
||||||
#if defined(DEBUG) && !defined(JS_JIT_SPEW)
|
#if defined(DEBUG) && !defined(JS_JIT_SPEW)
|
||||||
#define JS_JIT_SPEW
|
#define JS_JIT_SPEW
|
||||||
#endif
|
#endif
|
||||||
|
@ -1285,18 +1301,18 @@ class TraceRecorder
|
||||||
JS_REQUIRES_STACK AbortableRecordingStatus setElem(int lval_spindex, int idx_spindex,
|
JS_REQUIRES_STACK AbortableRecordingStatus setElem(int lval_spindex, int idx_spindex,
|
||||||
int v_spindex);
|
int v_spindex);
|
||||||
|
|
||||||
void box_undefined_into(nanojit::LIns *dstaddr_ins, ptrdiff_t offset, nanojit::AccSet);
|
void box_undefined_into(nanojit::LIns *dstaddr_ins, ptrdiff_t offset, nanojit::AccSet accSet);
|
||||||
#if JS_BITS_PER_WORD == 32
|
#if JS_BITS_PER_WORD == 32
|
||||||
void box_null_into(nanojit::LIns *dstaddr_ins, ptrdiff_t offset, nanojit::AccSet);
|
void box_null_into(nanojit::LIns *dstaddr_ins, ptrdiff_t offset, nanojit::AccSet accSet);
|
||||||
nanojit::LIns* unbox_number_as_double(nanojit::LIns* vaddr_ins, ptrdiff_t offset,
|
nanojit::LIns* unbox_number_as_double(nanojit::LIns* vaddr_ins, ptrdiff_t offset,
|
||||||
nanojit::LIns* tag_ins, VMSideExit* exit,
|
nanojit::LIns* tag_ins, VMSideExit* exit,
|
||||||
nanojit::AccSet);
|
nanojit::AccSet accSet);
|
||||||
nanojit::LIns* unbox_object(nanojit::LIns* vaddr_ins, ptrdiff_t offset,
|
nanojit::LIns* unbox_object(nanojit::LIns* vaddr_ins, ptrdiff_t offset,
|
||||||
nanojit::LIns* tag_ins, JSValueType type, VMSideExit* exit,
|
nanojit::LIns* tag_ins, JSValueType type, VMSideExit* exit,
|
||||||
nanojit::AccSet);
|
nanojit::AccSet accSet);
|
||||||
nanojit::LIns* unbox_non_double_object(nanojit::LIns* vaddr_ins, ptrdiff_t offset,
|
nanojit::LIns* unbox_non_double_object(nanojit::LIns* vaddr_ins, ptrdiff_t offset,
|
||||||
nanojit::LIns* tag_ins, JSValueType type,
|
nanojit::LIns* tag_ins, JSValueType type,
|
||||||
VMSideExit* exit, nanojit::AccSet);
|
VMSideExit* exit, nanojit::AccSet accSet);
|
||||||
#elif JS_BITS_PER_WORD == 64
|
#elif JS_BITS_PER_WORD == 64
|
||||||
nanojit::LIns* non_double_object_value_has_type(nanojit::LIns* v_ins, JSValueType type);
|
nanojit::LIns* non_double_object_value_has_type(nanojit::LIns* v_ins, JSValueType type);
|
||||||
nanojit::LIns* unpack_ptr(nanojit::LIns* v_ins);
|
nanojit::LIns* unpack_ptr(nanojit::LIns* v_ins);
|
||||||
|
@ -1309,8 +1325,8 @@ class TraceRecorder
|
||||||
ptrdiff_t offset, VMSideExit* exit,
|
ptrdiff_t offset, VMSideExit* exit,
|
||||||
bool force_double=false);
|
bool force_double=false);
|
||||||
void unbox_any_object(nanojit::LIns* vaddr_ins, nanojit::LIns** obj_ins,
|
void unbox_any_object(nanojit::LIns* vaddr_ins, nanojit::LIns** obj_ins,
|
||||||
nanojit::LIns** is_obj_ins, nanojit::AccSet);
|
nanojit::LIns** is_obj_ins, nanojit::AccSet accSet);
|
||||||
nanojit::LIns* is_boxed_true(nanojit::LIns* vaddr_ins, nanojit::AccSet);
|
nanojit::LIns* is_boxed_true(nanojit::LIns* vaddr_ins, nanojit::AccSet accSet);
|
||||||
|
|
||||||
nanojit::LIns* is_string_id(nanojit::LIns* id_ins);
|
nanojit::LIns* is_string_id(nanojit::LIns* id_ins);
|
||||||
nanojit::LIns* unbox_string_id(nanojit::LIns* id_ins);
|
nanojit::LIns* unbox_string_id(nanojit::LIns* id_ins);
|
||||||
|
@ -1319,7 +1335,7 @@ class TraceRecorder
|
||||||
/* Box a slot on trace into the given address at the given offset. */
|
/* Box a slot on trace into the given address at the given offset. */
|
||||||
void box_value_into(const Value& v, nanojit::LIns* v_ins,
|
void box_value_into(const Value& v, nanojit::LIns* v_ins,
|
||||||
nanojit::LIns* dstaddr_ins, ptrdiff_t offset,
|
nanojit::LIns* dstaddr_ins, ptrdiff_t offset,
|
||||||
nanojit::AccSet);
|
nanojit::AccSet accSet);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Box a slot so that it may be passed with value semantics to a native. On
|
* Box a slot so that it may be passed with value semantics to a native. On
|
||||||
|
@ -1333,11 +1349,11 @@ class TraceRecorder
|
||||||
nanojit::LIns* box_value_into_alloc(const Value& v, nanojit::LIns* v_ins);
|
nanojit::LIns* box_value_into_alloc(const Value& v, nanojit::LIns* v_ins);
|
||||||
|
|
||||||
JS_REQUIRES_STACK void guardClassHelper(bool cond, nanojit::LIns* obj_ins, Class* clasp,
|
JS_REQUIRES_STACK void guardClassHelper(bool cond, nanojit::LIns* obj_ins, Class* clasp,
|
||||||
VMSideExit* exit, nanojit::AccSet accSet);
|
VMSideExit* exit, nanojit::LoadQual loadQual);
|
||||||
JS_REQUIRES_STACK void guardClass(nanojit::LIns* obj_ins, Class* clasp,
|
JS_REQUIRES_STACK void guardClass(nanojit::LIns* obj_ins, Class* clasp,
|
||||||
VMSideExit* exit, nanojit::AccSet accSet);
|
VMSideExit* exit, nanojit::LoadQual loadQual);
|
||||||
JS_REQUIRES_STACK void guardNotClass(nanojit::LIns* obj_ins, Class* clasp,
|
JS_REQUIRES_STACK void guardNotClass(nanojit::LIns* obj_ins, Class* clasp,
|
||||||
VMSideExit* exit, nanojit::AccSet accSet);
|
VMSideExit* exit, nanojit::LoadQual loadQual);
|
||||||
JS_REQUIRES_STACK void guardDenseArray(nanojit::LIns* obj_ins, ExitType exitType);
|
JS_REQUIRES_STACK void guardDenseArray(nanojit::LIns* obj_ins, ExitType exitType);
|
||||||
JS_REQUIRES_STACK void guardDenseArray(nanojit::LIns* obj_ins, VMSideExit* exit);
|
JS_REQUIRES_STACK void guardDenseArray(nanojit::LIns* obj_ins, VMSideExit* exit);
|
||||||
JS_REQUIRES_STACK bool guardHasPrototype(JSObject* obj, nanojit::LIns* obj_ins,
|
JS_REQUIRES_STACK bool guardHasPrototype(JSObject* obj, nanojit::LIns* obj_ins,
|
||||||
|
|
|
@ -376,7 +376,8 @@ js_TypedArray_uint8_clamp_double(const double x)
|
||||||
return y;
|
return y;
|
||||||
}
|
}
|
||||||
|
|
||||||
JS_DEFINE_CALLINFO_1(extern, INT32, js_TypedArray_uint8_clamp_double, DOUBLE, 1, nanojit::ACC_NONE)
|
JS_DEFINE_CALLINFO_1(extern, INT32, js_TypedArray_uint8_clamp_double, DOUBLE,
|
||||||
|
1, nanojit::ACCSET_NONE)
|
||||||
|
|
||||||
|
|
||||||
struct uint8_clamped {
|
struct uint8_clamped {
|
||||||
|
|
Загрузка…
Ссылка в новой задаче