Bug 552812 - nanojit: factor out AccSet differences into TM and TR (TM-specific part). r=gal.

This commit is contained in:
Nicholas Nethercote 2010-07-25 21:23:02 -07:00
Родитель 6b96b67f4b
Коммит b2a60fa1e2
14 изменённых файлов: 432 добавлений и 355 удалений

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

@ -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 {