mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Renamed InterpState to TracerState (bug 560988, r=luke).
This commit is contained in:
parent
bb10846365
commit
ab155f0037
@ -347,7 +347,7 @@ JS_DEFINE_CALLINFO_4(extern, OBJECT, js_NewNullClosure, CONTEXT, OBJECT, OBJECT,
|
|||||||
ACC_STORE_ANY)
|
ACC_STORE_ANY)
|
||||||
|
|
||||||
JS_REQUIRES_STACK JSBool FASTCALL
|
JS_REQUIRES_STACK JSBool FASTCALL
|
||||||
js_PopInterpFrame(JSContext* cx, InterpState* state)
|
js_PopInterpFrame(JSContext* cx, TracerState* state)
|
||||||
{
|
{
|
||||||
JS_ASSERT(cx->fp && cx->fp->down);
|
JS_ASSERT(cx->fp && cx->fp->down);
|
||||||
JSInlineFrame* ifp = (JSInlineFrame*)cx->fp;
|
JSInlineFrame* ifp = (JSInlineFrame*)cx->fp;
|
||||||
@ -385,7 +385,7 @@ js_PopInterpFrame(JSContext* cx, InterpState* 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, INTERPSTATE, 0, ACC_STORE_ANY)
|
JS_DEFINE_CALLINFO_2(extern, BOOL, js_PopInterpFrame, CONTEXT, TRACERSTATE, 0, ACC_STORE_ANY)
|
||||||
|
|
||||||
JSString* FASTCALL
|
JSString* FASTCALL
|
||||||
js_ConcatN(JSContext *cx, JSString **strArray, uint32 size)
|
js_ConcatN(JSContext *cx, JSString **strArray, uint32 size)
|
||||||
|
@ -220,7 +220,7 @@ struct ClosureVarInfo;
|
|||||||
JSTN_CONSTRUCTOR)
|
JSTN_CONSTRUCTOR)
|
||||||
#define _JS_CTYPE_REGEXP _JS_CTYPE(JSObject *, _JS_PTR, "","r", INFALLIBLE)
|
#define _JS_CTYPE_REGEXP _JS_CTYPE(JSObject *, _JS_PTR, "","r", INFALLIBLE)
|
||||||
#define _JS_CTYPE_SCOPEPROP _JS_CTYPE(JSScopeProperty *, _JS_PTR, --, --, INFALLIBLE)
|
#define _JS_CTYPE_SCOPEPROP _JS_CTYPE(JSScopeProperty *, _JS_PTR, --, --, INFALLIBLE)
|
||||||
#define _JS_CTYPE_INTERPSTATE _JS_CTYPE(InterpState *, _JS_PTR, --, --, INFALLIBLE)
|
#define _JS_CTYPE_TRACERSTATE _JS_CTYPE(TracerState *, _JS_PTR, --, --, INFALLIBLE)
|
||||||
#define _JS_CTYPE_FRAGMENT _JS_CTYPE(nanojit::Fragment *, _JS_PTR, --, --, INFALLIBLE)
|
#define _JS_CTYPE_FRAGMENT _JS_CTYPE(nanojit::Fragment *, _JS_PTR, --, --, INFALLIBLE)
|
||||||
#define _JS_CTYPE_CLASS _JS_CTYPE(JSClass *, _JS_PTR, --, --, INFALLIBLE)
|
#define _JS_CTYPE_CLASS _JS_CTYPE(JSClass *, _JS_PTR, --, --, INFALLIBLE)
|
||||||
#define _JS_CTYPE_DOUBLEPTR _JS_CTYPE(double *, _JS_PTR, --, --, INFALLIBLE)
|
#define _JS_CTYPE_DOUBLEPTR _JS_CTYPE(double *, _JS_PTR, --, --, INFALLIBLE)
|
||||||
|
@ -131,7 +131,7 @@ struct REHashKey;
|
|||||||
struct FrameInfo;
|
struct FrameInfo;
|
||||||
struct VMSideExit;
|
struct VMSideExit;
|
||||||
struct TreeFragment;
|
struct TreeFragment;
|
||||||
struct InterpState;
|
struct TracerState;
|
||||||
template<typename T> class Queue;
|
template<typename T> class Queue;
|
||||||
typedef Queue<uint16> SlotList;
|
typedef Queue<uint16> SlotList;
|
||||||
class TypeMap;
|
class TypeMap;
|
||||||
@ -165,7 +165,7 @@ class ContextAllocPolicy
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* Holds the execution state during trace execution. */
|
/* Holds the execution state during trace execution. */
|
||||||
struct InterpState
|
struct TracerState
|
||||||
{
|
{
|
||||||
JSContext* cx; // current VM context handle
|
JSContext* cx; // current VM context handle
|
||||||
double* stackBase; // native stack base
|
double* stackBase; // native stack base
|
||||||
@ -185,7 +185,7 @@ struct InterpState
|
|||||||
VMSideExit** innermostNestedGuardp;
|
VMSideExit** innermostNestedGuardp;
|
||||||
VMSideExit* innermost;
|
VMSideExit* innermost;
|
||||||
uint64 startTime;
|
uint64 startTime;
|
||||||
InterpState* prev;
|
TracerState* prev;
|
||||||
|
|
||||||
// Used by _FAIL builtins; see jsbuiltins.h. The builtin sets the
|
// Used by _FAIL builtins; see jsbuiltins.h. The builtin sets the
|
||||||
// JSBUILTIN_BAILED bit if it bails off trace and the JSBUILTIN_ERROR bit
|
// JSBUILTIN_BAILED bit if it bails off trace and the JSBUILTIN_ERROR bit
|
||||||
@ -199,15 +199,15 @@ struct InterpState
|
|||||||
uintN nativeVpLen;
|
uintN nativeVpLen;
|
||||||
jsval* nativeVp;
|
jsval* nativeVp;
|
||||||
|
|
||||||
InterpState(JSContext *cx, TraceMonitor *tm, TreeFragment *ti,
|
TracerState(JSContext *cx, TraceMonitor *tm, TreeFragment *ti,
|
||||||
uintN &inlineCallCountp, VMSideExit** innermostNestedGuardp);
|
uintN &inlineCallCountp, VMSideExit** innermostNestedGuardp);
|
||||||
~InterpState();
|
~TracerState();
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Storage for the execution state and store during trace execution. Generated
|
* Storage for the execution state and store during trace execution. Generated
|
||||||
* code depends on the fact that the globals begin |MAX_NATIVE_STACK_SLOTS|
|
* code depends on the fact that the globals begin |MAX_NATIVE_STACK_SLOTS|
|
||||||
* doubles after the stack begins. Thus, on trace, |InterpState::eos| holds a
|
* doubles after the stack begins. Thus, on trace, |TracerState::eos| holds a
|
||||||
* pointer to the first global.
|
* pointer to the first global.
|
||||||
*/
|
*/
|
||||||
struct TraceNativeStorage
|
struct TraceNativeStorage
|
||||||
@ -1424,7 +1424,7 @@ struct JSContext
|
|||||||
* called back into native code via a _FAIL builtin and has not yet bailed,
|
* called back into native code via a _FAIL builtin and has not yet bailed,
|
||||||
* else garbage (NULL in debug builds).
|
* else garbage (NULL in debug builds).
|
||||||
*/
|
*/
|
||||||
js::InterpState *interpState;
|
js::TracerState *tracerState;
|
||||||
js::VMSideExit *bailExit;
|
js::VMSideExit *bailExit;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -2457,7 +2457,7 @@ js_TraceContext(JSTracer *trc, JSContext *acx)
|
|||||||
js_TraceRegExpStatics(trc, acx);
|
js_TraceRegExpStatics(trc, acx);
|
||||||
|
|
||||||
#ifdef JS_TRACER
|
#ifdef JS_TRACER
|
||||||
InterpState* state = acx->interpState;
|
TracerState* state = acx->tracerState;
|
||||||
while (state) {
|
while (state) {
|
||||||
if (state->nativeVp)
|
if (state->nativeVp)
|
||||||
TraceValues(trc, state->nativeVpLen, state->nativeVp, "nativeVp");
|
TraceValues(trc, state->nativeVpLen, state->nativeVp, "nativeVp");
|
||||||
|
@ -113,10 +113,10 @@ class UpRecursiveSlotMap : public RecursiveSlotMap
|
|||||||
|
|
||||||
lirbuf->sp = lir->ins2(LIR_piadd, lirbuf->sp,
|
lirbuf->sp = lir->ins2(LIR_piadd, lirbuf->sp,
|
||||||
lir->insImmWord(-int(downPostSlots) * sizeof(double)));
|
lir->insImmWord(-int(downPostSlots) * sizeof(double)));
|
||||||
lir->insStore(lirbuf->sp, lirbuf->state, offsetof(InterpState, sp), ACC_OTHER);
|
lir->insStore(lirbuf->sp, lirbuf->state, offsetof(TracerState, sp), ACC_OTHER);
|
||||||
lirbuf->rp = lir->ins2(LIR_piadd, lirbuf->rp,
|
lirbuf->rp = lir->ins2(LIR_piadd, lirbuf->rp,
|
||||||
lir->insImmWord(-int(sizeof(FrameInfo*))));
|
lir->insImmWord(-int(sizeof(FrameInfo*))));
|
||||||
lir->insStore(lirbuf->rp, lirbuf->state, offsetof(InterpState, rp), ACC_OTHER);
|
lir->insStore(lirbuf->rp, lirbuf->state, offsetof(TracerState, rp), ACC_OTHER);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -289,7 +289,7 @@ TraceRecorder::upRecursion()
|
|||||||
lir->ins2(LIR_pge, lirbuf->rp,
|
lir->ins2(LIR_pge, lirbuf->rp,
|
||||||
lir->ins2(LIR_piadd,
|
lir->ins2(LIR_piadd,
|
||||||
lir->insLoad(LIR_ldp, lirbuf->state,
|
lir->insLoad(LIR_ldp, lirbuf->state,
|
||||||
offsetof(InterpState, sor), ACC_OTHER),
|
offsetof(TracerState, sor), ACC_OTHER),
|
||||||
INS_CONSTWORD(sizeof(FrameInfo*)))),
|
INS_CONSTWORD(sizeof(FrameInfo*)))),
|
||||||
exit);
|
exit);
|
||||||
}
|
}
|
||||||
@ -703,9 +703,9 @@ TraceRecorder::downRecursion()
|
|||||||
|
|
||||||
/* Add space for a new JIT frame. */
|
/* Add space for a new JIT frame. */
|
||||||
lirbuf->sp = lir->ins2(LIR_piadd, lirbuf->sp, lir->insImmWord(slots * sizeof(double)));
|
lirbuf->sp = lir->ins2(LIR_piadd, lirbuf->sp, lir->insImmWord(slots * sizeof(double)));
|
||||||
lir->insStore(lirbuf->sp, lirbuf->state, offsetof(InterpState, sp), ACC_OTHER);
|
lir->insStore(lirbuf->sp, lirbuf->state, offsetof(TracerState, sp), ACC_OTHER);
|
||||||
lirbuf->rp = lir->ins2(LIR_piadd, lirbuf->rp, lir->insImmWord(sizeof(FrameInfo*)));
|
lirbuf->rp = lir->ins2(LIR_piadd, lirbuf->rp, lir->insImmWord(sizeof(FrameInfo*)));
|
||||||
lir->insStore(lirbuf->rp, lirbuf->state, offsetof(InterpState, rp), ACC_OTHER);
|
lir->insStore(lirbuf->rp, lirbuf->state, offsetof(TracerState, rp), ACC_OTHER);
|
||||||
--callDepth;
|
--callDepth;
|
||||||
clearCurrentFrameSlotsFromTracker(nativeFrameTracker);
|
clearCurrentFrameSlotsFromTracker(nativeFrameTracker);
|
||||||
|
|
||||||
|
@ -2276,15 +2276,15 @@ TraceRecorder::TraceRecorder(JSContext* cx, VMSideExit* anchor, VMFragment* frag
|
|||||||
})
|
})
|
||||||
|
|
||||||
lirbuf->sp =
|
lirbuf->sp =
|
||||||
addName(lir->insLoad(LIR_ldp, lirbuf->state, offsetof(InterpState, sp), ACC_OTHER), "sp");
|
addName(lir->insLoad(LIR_ldp, lirbuf->state, offsetof(TracerState, sp), ACC_OTHER), "sp");
|
||||||
lirbuf->rp =
|
lirbuf->rp =
|
||||||
addName(lir->insLoad(LIR_ldp, lirbuf->state, offsetof(InterpState, rp), ACC_OTHER), "rp");
|
addName(lir->insLoad(LIR_ldp, lirbuf->state, offsetof(TracerState, rp), ACC_OTHER), "rp");
|
||||||
InitConst(cx_ins) =
|
InitConst(cx_ins) =
|
||||||
addName(lir->insLoad(LIR_ldp, lirbuf->state, offsetof(InterpState, cx), ACC_OTHER), "cx");
|
addName(lir->insLoad(LIR_ldp, lirbuf->state, offsetof(TracerState, cx), ACC_OTHER), "cx");
|
||||||
InitConst(eos_ins) =
|
InitConst(eos_ins) =
|
||||||
addName(lir->insLoad(LIR_ldp, lirbuf->state, offsetof(InterpState, eos), ACC_OTHER), "eos");
|
addName(lir->insLoad(LIR_ldp, lirbuf->state, offsetof(TracerState, eos), ACC_OTHER), "eos");
|
||||||
InitConst(eor_ins) =
|
InitConst(eor_ins) =
|
||||||
addName(lir->insLoad(LIR_ldp, lirbuf->state, offsetof(InterpState, eor), ACC_OTHER), "eor");
|
addName(lir->insLoad(LIR_ldp, lirbuf->state, offsetof(TracerState, eor), ACC_OTHER), "eor");
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
// Need to set these up before any stack/rstack loads/stores occur.
|
// Need to set these up before any stack/rstack loads/stores occur.
|
||||||
@ -2323,7 +2323,7 @@ TraceRecorder::TraceRecorder(JSContext* cx, VMSideExit* anchor, VMFragment* frag
|
|||||||
*/
|
*/
|
||||||
if (anchor && anchor->exitType == NESTED_EXIT) {
|
if (anchor && anchor->exitType == NESTED_EXIT) {
|
||||||
LIns* nested_ins = addName(lir->insLoad(LIR_ldp, lirbuf->state,
|
LIns* nested_ins = addName(lir->insLoad(LIR_ldp, lirbuf->state,
|
||||||
offsetof(InterpState, outermostTreeExitGuard),
|
offsetof(TracerState, outermostTreeExitGuard),
|
||||||
ACC_OTHER), "outermostTreeExitGuard");
|
ACC_OTHER), "outermostTreeExitGuard");
|
||||||
guard(true, lir->ins2(LIR_peq, nested_ins, INS_CONSTPTR(innermost)), NESTED_EXIT);
|
guard(true, lir->ins2(LIR_peq, nested_ins, INS_CONSTPTR(innermost)), NESTED_EXIT);
|
||||||
}
|
}
|
||||||
@ -2518,9 +2518,9 @@ TraceRecorder::isGlobal(jsval* p) const
|
|||||||
/*
|
/*
|
||||||
* Return the offset in the native stack for the given jsval. More formally,
|
* Return the offset in the native stack for the given jsval. More formally,
|
||||||
* |p| must be the address of a jsval that is represented in the native stack
|
* |p| must be the address of a jsval that is represented in the native stack
|
||||||
* area. The return value is the offset, from InterpState::stackBase, in bytes,
|
* area. The return value is the offset, from TracerState::stackBase, in bytes,
|
||||||
* where the native representation of |*p| is stored. To get the offset
|
* where the native representation of |*p| is stored. To get the offset
|
||||||
* relative to InterpState::sp, subtract TreeFragment::nativeStackBase.
|
* relative to TracerState::sp, subtract TreeFragment::nativeStackBase.
|
||||||
*/
|
*/
|
||||||
JS_REQUIRES_STACK ptrdiff_t
|
JS_REQUIRES_STACK ptrdiff_t
|
||||||
TraceRecorder::nativeStackOffset(jsval* p) const
|
TraceRecorder::nativeStackOffset(jsval* p) const
|
||||||
@ -2547,7 +2547,7 @@ TraceRecorder::nativeStackSlot(jsval* p) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return the offset, from InterpState:sp, for the given jsval. Shorthand for:
|
* Return the offset, from TracerState:sp, for the given jsval. Shorthand for:
|
||||||
* -TreeFragment::nativeStackBase + nativeStackOffset(p).
|
* -TreeFragment::nativeStackBase + nativeStackOffset(p).
|
||||||
*/
|
*/
|
||||||
inline JS_REQUIRES_STACK ptrdiff_t
|
inline JS_REQUIRES_STACK ptrdiff_t
|
||||||
@ -2963,7 +2963,7 @@ FlushNativeGlobalFrame(JSContext *cx, JSObject *globalObj, double *global, unsig
|
|||||||
* slot usage of each frame.
|
* slot usage of each frame.
|
||||||
*/
|
*/
|
||||||
static int32
|
static int32
|
||||||
StackDepthFromCallStack(InterpState* state, uint32 callDepth)
|
StackDepthFromCallStack(TracerState* state, uint32 callDepth)
|
||||||
{
|
{
|
||||||
int32 nativeStackFramePos = 0;
|
int32 nativeStackFramePos = 0;
|
||||||
|
|
||||||
@ -2988,7 +2988,7 @@ template<typename T>
|
|||||||
inline TraceType
|
inline TraceType
|
||||||
GetUpvarOnTrace(JSContext* cx, uint32 upvarLevel, int32 slot, uint32 callDepth, double* result)
|
GetUpvarOnTrace(JSContext* cx, uint32 upvarLevel, int32 slot, uint32 callDepth, double* result)
|
||||||
{
|
{
|
||||||
InterpState* state = cx->interpState;
|
TracerState* state = cx->tracerState;
|
||||||
FrameInfo** fip = state->rp + callDepth;
|
FrameInfo** fip = state->rp + callDepth;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -3124,7 +3124,7 @@ GetFromClosure(JSContext* cx, JSObject* call, const ClosureVarInfo* cv, double*
|
|||||||
{
|
{
|
||||||
JS_ASSERT(call->getClass() == &js_CallClass);
|
JS_ASSERT(call->getClass() == &js_CallClass);
|
||||||
|
|
||||||
InterpState* state = cx->interpState;
|
TracerState* state = cx->tracerState;
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
FrameInfo** fip = state->rp + cv->callDepth;
|
FrameInfo** fip = state->rp + cv->callDepth;
|
||||||
@ -4193,7 +4193,7 @@ TraceRecorder::guard(bool expected, LIns* cond, ExitType exitType)
|
|||||||
static inline bool
|
static inline bool
|
||||||
ProhibitFlush(JSContext* cx)
|
ProhibitFlush(JSContext* cx)
|
||||||
{
|
{
|
||||||
if (cx->interpState) // early out if the given is in native code
|
if (cx->tracerState) // early out if the given is in native code
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
JSCList *cl;
|
JSCList *cl;
|
||||||
@ -4201,12 +4201,12 @@ ProhibitFlush(JSContext* cx)
|
|||||||
#ifdef JS_THREADSAFE
|
#ifdef JS_THREADSAFE
|
||||||
JSThread* thread = cx->thread;
|
JSThread* thread = cx->thread;
|
||||||
for (cl = thread->contextList.next; cl != &thread->contextList; cl = cl->next)
|
for (cl = thread->contextList.next; cl != &thread->contextList; cl = cl->next)
|
||||||
if (CX_FROM_THREAD_LINKS(cl)->interpState)
|
if (CX_FROM_THREAD_LINKS(cl)->tracerState)
|
||||||
return true;
|
return true;
|
||||||
#else
|
#else
|
||||||
JSRuntime* rt = cx->runtime;
|
JSRuntime* rt = cx->runtime;
|
||||||
for (cl = rt->contextList.next; cl != &rt->contextList; cl = cl->next)
|
for (cl = rt->contextList.next; cl != &rt->contextList; cl = cl->next)
|
||||||
if (js_ContextFromLinkField(cl)->interpState)
|
if (js_ContextFromLinkField(cl)->tracerState)
|
||||||
return true;
|
return true;
|
||||||
#endif
|
#endif
|
||||||
return false;
|
return false;
|
||||||
@ -4967,9 +4967,9 @@ TraceRecorder::prepareTreeCall(TreeFragment* inner)
|
|||||||
+ inner->nativeStackBase; /* plus the inner tree's stack base */
|
+ inner->nativeStackBase; /* plus the inner tree's stack base */
|
||||||
/* We have enough space, so adjust sp and rp to their new level. */
|
/* We have enough space, so adjust sp and rp to their new level. */
|
||||||
lir->insStore(lir->ins2(LIR_piadd, lirbuf->sp, INS_CONSTWORD(sp_offset)),
|
lir->insStore(lir->ins2(LIR_piadd, lirbuf->sp, INS_CONSTWORD(sp_offset)),
|
||||||
lirbuf->state, offsetof(InterpState, sp), ACC_OTHER);
|
lirbuf->state, offsetof(TracerState, sp), ACC_OTHER);
|
||||||
lir->insStore(lir->ins2(LIR_piadd, lirbuf->rp, INS_CONSTWORD(rp_adj)),
|
lir->insStore(lir->ins2(LIR_piadd, lirbuf->rp, INS_CONSTWORD(rp_adj)),
|
||||||
lirbuf->state, offsetof(InterpState, rp), ACC_OTHER);
|
lirbuf->state, offsetof(TracerState, rp), ACC_OTHER);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -5034,7 +5034,7 @@ TraceRecorder::emitTreeCall(TreeFragment* inner, VMSideExit* exit)
|
|||||||
* with that guard. If we mismatch on a tree call guard, this will contain the last
|
* with that guard. If we mismatch on a tree call guard, this will contain the last
|
||||||
* non-nested guard we encountered, which is the innermost loop or branch guard.
|
* non-nested guard we encountered, which is the innermost loop or branch guard.
|
||||||
*/
|
*/
|
||||||
lir->insStore(lr, lirbuf->state, offsetof(InterpState, lastTreeExitGuard), ACC_OTHER);
|
lir->insStore(lr, lirbuf->state, offsetof(TracerState, lastTreeExitGuard), ACC_OTHER);
|
||||||
LIns* done1 = lir->insBranch(LIR_j, NULL, NULL);
|
LIns* done1 = lir->insBranch(LIR_j, NULL, NULL);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -5046,12 +5046,12 @@ TraceRecorder::emitTreeCall(TreeFragment* inner, VMSideExit* exit)
|
|||||||
LIns* done2 = lir->insBranch(LIR_jf,
|
LIns* done2 = lir->insBranch(LIR_jf,
|
||||||
lir->insEqP_0(lir->insLoad(LIR_ldp,
|
lir->insEqP_0(lir->insLoad(LIR_ldp,
|
||||||
lirbuf->state,
|
lirbuf->state,
|
||||||
offsetof(InterpState, lastTreeCallGuard),
|
offsetof(TracerState, lastTreeCallGuard),
|
||||||
ACC_OTHER)),
|
ACC_OTHER)),
|
||||||
NULL);
|
NULL);
|
||||||
lir->insStore(lr, lirbuf->state, offsetof(InterpState, lastTreeCallGuard), ACC_OTHER);
|
lir->insStore(lr, lirbuf->state, offsetof(TracerState, lastTreeCallGuard), ACC_OTHER);
|
||||||
lir->insStore(lir->ins2(LIR_piadd,
|
lir->insStore(lir->ins2(LIR_piadd,
|
||||||
lir->insLoad(LIR_ldp, lirbuf->state, offsetof(InterpState, rp),
|
lir->insLoad(LIR_ldp, lirbuf->state, offsetof(TracerState, rp),
|
||||||
ACC_OTHER),
|
ACC_OTHER),
|
||||||
lir->insI2P(lir->ins2ImmI(LIR_lsh,
|
lir->insI2P(lir->ins2ImmI(LIR_lsh,
|
||||||
lir->insLoad(LIR_ld, lr,
|
lir->insLoad(LIR_ld, lr,
|
||||||
@ -5059,16 +5059,16 @@ TraceRecorder::emitTreeCall(TreeFragment* inner, VMSideExit* exit)
|
|||||||
ACC_OTHER),
|
ACC_OTHER),
|
||||||
sizeof(void*) == 4 ? 2 : 3))),
|
sizeof(void*) == 4 ? 2 : 3))),
|
||||||
lirbuf->state,
|
lirbuf->state,
|
||||||
offsetof(InterpState, rpAtLastTreeCall), ACC_OTHER);
|
offsetof(TracerState, rpAtLastTreeCall), ACC_OTHER);
|
||||||
LIns* label = lir->ins0(LIR_label);
|
LIns* label = lir->ins0(LIR_label);
|
||||||
done1->setTarget(label);
|
done1->setTarget(label);
|
||||||
done2->setTarget(label);
|
done2->setTarget(label);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Keep updating outermostTreeExit so that InterpState always contains the most recent
|
* Keep updating outermostTreeExit so that TracerState always contains the most recent
|
||||||
* side exit.
|
* side exit.
|
||||||
*/
|
*/
|
||||||
lir->insStore(lr, lirbuf->state, offsetof(InterpState, outermostTreeExitGuard), ACC_OTHER);
|
lir->insStore(lr, lirbuf->state, offsetof(TracerState, outermostTreeExitGuard), ACC_OTHER);
|
||||||
|
|
||||||
/* Read back all registers, in case the called tree changed any of them. */
|
/* Read back all registers, in case the called tree changed any of them. */
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
@ -5120,8 +5120,8 @@ TraceRecorder::emitTreeCall(TreeFragment* inner, VMSideExit* exit)
|
|||||||
|
|
||||||
/* Restore sp and rp to their original values (we still have them in a register). */
|
/* Restore sp and rp to their original values (we still have them in a register). */
|
||||||
if (callDepth > 0) {
|
if (callDepth > 0) {
|
||||||
lir->insStore(lirbuf->sp, lirbuf->state, offsetof(InterpState, sp), ACC_OTHER);
|
lir->insStore(lirbuf->sp, lirbuf->state, offsetof(TracerState, sp), ACC_OTHER);
|
||||||
lir->insStore(lirbuf->rp, lirbuf->state, offsetof(InterpState, rp), ACC_OTHER);
|
lir->insStore(lirbuf->rp, lirbuf->state, offsetof(TracerState, rp), ACC_OTHER);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -5581,7 +5581,7 @@ SynthesizeFrame(JSContext* cx, const FrameInfo& fi, JSObject* callee)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
SynthesizeSlowNativeFrame(InterpState& state, JSContext *cx, VMSideExit *exit)
|
SynthesizeSlowNativeFrame(TracerState& state, JSContext *cx, VMSideExit *exit)
|
||||||
{
|
{
|
||||||
VOUCH_DOES_NOT_REQUIRE_STACK();
|
VOUCH_DOES_NOT_REQUIRE_STACK();
|
||||||
|
|
||||||
@ -6344,7 +6344,7 @@ FindVMCompatiblePeer(JSContext* cx, JSObject* globalObj, TreeFragment* f, uintN&
|
|||||||
* |deepBailSp| in DeepBail.
|
* |deepBailSp| in DeepBail.
|
||||||
*/
|
*/
|
||||||
JS_ALWAYS_INLINE
|
JS_ALWAYS_INLINE
|
||||||
InterpState::InterpState(JSContext* cx, TraceMonitor* tm, TreeFragment* f,
|
TracerState::TracerState(JSContext* cx, TraceMonitor* tm, TreeFragment* f,
|
||||||
uintN& inlineCallCount, VMSideExit** innermostNestedGuardp)
|
uintN& inlineCallCount, VMSideExit** innermostNestedGuardp)
|
||||||
: cx(cx),
|
: cx(cx),
|
||||||
stackBase(tm->storage->stack()),
|
stackBase(tm->storage->stack()),
|
||||||
@ -6369,8 +6369,8 @@ InterpState::InterpState(JSContext* cx, TraceMonitor* tm, TreeFragment* f,
|
|||||||
{
|
{
|
||||||
JS_ASSERT(!tm->tracecx);
|
JS_ASSERT(!tm->tracecx);
|
||||||
tm->tracecx = cx;
|
tm->tracecx = cx;
|
||||||
prev = cx->interpState;
|
prev = cx->tracerState;
|
||||||
cx->interpState = this;
|
cx->tracerState = this;
|
||||||
|
|
||||||
JS_ASSERT(eos == stackBase + MAX_NATIVE_STACK_SLOTS);
|
JS_ASSERT(eos == stackBase + MAX_NATIVE_STACK_SLOTS);
|
||||||
JS_ASSERT(sp < eos);
|
JS_ASSERT(sp < eos);
|
||||||
@ -6393,20 +6393,20 @@ InterpState::InterpState(JSContext* cx, TraceMonitor* tm, TreeFragment* f,
|
|||||||
}
|
}
|
||||||
|
|
||||||
JS_ALWAYS_INLINE
|
JS_ALWAYS_INLINE
|
||||||
InterpState::~InterpState()
|
TracerState::~TracerState()
|
||||||
{
|
{
|
||||||
JS_ASSERT(!nativeVp);
|
JS_ASSERT(!nativeVp);
|
||||||
|
|
||||||
cx->interpState = prev;
|
cx->tracerState = prev;
|
||||||
JS_TRACE_MONITOR(cx).tracecx = NULL;
|
JS_TRACE_MONITOR(cx).tracecx = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Call |f|, return the exit taken. */
|
/* Call |f|, return the exit taken. */
|
||||||
static JS_ALWAYS_INLINE VMSideExit*
|
static JS_ALWAYS_INLINE VMSideExit*
|
||||||
ExecuteTrace(JSContext* cx, Fragment* f, InterpState& state)
|
ExecuteTrace(JSContext* cx, Fragment* f, TracerState& state)
|
||||||
{
|
{
|
||||||
JS_ASSERT(!cx->bailExit);
|
JS_ASSERT(!cx->bailExit);
|
||||||
union { NIns *code; GuardRecord* (FASTCALL *func)(InterpState*); } u;
|
union { NIns *code; GuardRecord* (FASTCALL *func)(TracerState*); } u;
|
||||||
u.code = f->code();
|
u.code = f->code();
|
||||||
GuardRecord* rec;
|
GuardRecord* rec;
|
||||||
#if defined(JS_NO_FASTCALL) && defined(NANOJIT_IA32)
|
#if defined(JS_NO_FASTCALL) && defined(NANOJIT_IA32)
|
||||||
@ -6461,7 +6461,7 @@ ScopeChainCheck(JSContext* cx, TreeFragment* f)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
LeaveTree(TraceMonitor *tm, InterpState&, VMSideExit* lr);
|
LeaveTree(TraceMonitor *tm, TracerState&, VMSideExit* lr);
|
||||||
|
|
||||||
static JS_REQUIRES_STACK VMSideExit*
|
static JS_REQUIRES_STACK VMSideExit*
|
||||||
ExecuteTree(JSContext* cx, TreeFragment* f, uintN& inlineCallCount,
|
ExecuteTree(JSContext* cx, TreeFragment* f, uintN& inlineCallCount,
|
||||||
@ -6483,7 +6483,7 @@ ExecuteTree(JSContext* cx, TreeFragment* f, uintN& inlineCallCount,
|
|||||||
f->globalObj->shape() == f->globalShape);
|
f->globalObj->shape() == f->globalShape);
|
||||||
|
|
||||||
/* Initialize trace state. */
|
/* Initialize trace state. */
|
||||||
InterpState state(cx, tm, f, inlineCallCount, innermostNestedGuardp);
|
TracerState state(cx, tm, f, inlineCallCount, innermostNestedGuardp);
|
||||||
double* stack = tm->storage->stack();
|
double* stack = tm->storage->stack();
|
||||||
double* global = tm->storage->global();
|
double* global = tm->storage->global();
|
||||||
JSObject* globalObj = f->globalObj;
|
JSObject* globalObj = f->globalObj;
|
||||||
@ -6536,7 +6536,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
static JS_FORCES_STACK void
|
static JS_FORCES_STACK void
|
||||||
LeaveTree(TraceMonitor *tm, InterpState& state, VMSideExit* lr)
|
LeaveTree(TraceMonitor *tm, TracerState& state, VMSideExit* lr)
|
||||||
{
|
{
|
||||||
VOUCH_DOES_NOT_REQUIRE_STACK();
|
VOUCH_DOES_NOT_REQUIRE_STACK();
|
||||||
|
|
||||||
@ -7735,10 +7735,10 @@ DeepBail(JSContext *cx)
|
|||||||
|
|
||||||
tm->tracecx = NULL;
|
tm->tracecx = NULL;
|
||||||
debug_only_print0(LC_TMTracer, "Deep bail.\n");
|
debug_only_print0(LC_TMTracer, "Deep bail.\n");
|
||||||
LeaveTree(tm, *tracecx->interpState, tracecx->bailExit);
|
LeaveTree(tm, *tracecx->tracerState, tracecx->bailExit);
|
||||||
tracecx->bailExit = NULL;
|
tracecx->bailExit = NULL;
|
||||||
|
|
||||||
InterpState* state = tracecx->interpState;
|
TracerState* state = tracecx->tracerState;
|
||||||
state->builtinStatus |= BUILTIN_BAILED;
|
state->builtinStatus |= BUILTIN_BAILED;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -10530,7 +10530,7 @@ TraceRecorder::propagateFailureToBuiltinStatus(LIns* ok_ins, LIns*& status_ins)
|
|||||||
lir->ins2ImmI(LIR_and, ok_ins, 1),
|
lir->ins2ImmI(LIR_and, ok_ins, 1),
|
||||||
1),
|
1),
|
||||||
1));
|
1));
|
||||||
lir->insStore(status_ins, lirbuf->state, (int) offsetof(InterpState, builtinStatus),
|
lir->insStore(status_ins, lirbuf->state, (int) offsetof(TracerState, builtinStatus),
|
||||||
ACC_OTHER);
|
ACC_OTHER);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -10547,8 +10547,8 @@ TraceRecorder::emitNativePropertyOp(JSScope* scope, JSScopeProperty* sprop, LIns
|
|||||||
// because the getter or setter could end up resizing the object's dslots.
|
// because the getter or setter could end up resizing the object's dslots.
|
||||||
// Instead, use a word of stack and root it in nativeVp.
|
// Instead, use a word of stack and root it in nativeVp.
|
||||||
LIns* vp_ins = lir->insAlloc(sizeof(jsval));
|
LIns* vp_ins = lir->insAlloc(sizeof(jsval));
|
||||||
lir->insStore(vp_ins, lirbuf->state, offsetof(InterpState, nativeVp), ACC_OTHER);
|
lir->insStore(vp_ins, lirbuf->state, offsetof(TracerState, nativeVp), ACC_OTHER);
|
||||||
lir->insStore(INS_CONST(1), lirbuf->state, offsetof(InterpState, nativeVpLen), ACC_OTHER);
|
lir->insStore(INS_CONST(1), lirbuf->state, offsetof(TracerState, nativeVpLen), ACC_OTHER);
|
||||||
if (setflag)
|
if (setflag)
|
||||||
lir->insStore(boxed_ins, vp_ins, 0, ACC_OTHER);
|
lir->insStore(boxed_ins, vp_ins, 0, ACC_OTHER);
|
||||||
|
|
||||||
@ -10569,7 +10569,7 @@ TraceRecorder::emitNativePropertyOp(JSScope* scope, JSScopeProperty* sprop, LIns
|
|||||||
LIns* ok_ins = lir->insCall(ci, args);
|
LIns* ok_ins = lir->insCall(ci, args);
|
||||||
|
|
||||||
// Cleanup. Immediately clear nativeVp before we might deep bail.
|
// Cleanup. Immediately clear nativeVp before we might deep bail.
|
||||||
lir->insStore(INS_NULL(), lirbuf->state, offsetof(InterpState, nativeVp), ACC_OTHER);
|
lir->insStore(INS_NULL(), lirbuf->state, offsetof(TracerState, nativeVp), ACC_OTHER);
|
||||||
leaveDeepBailCall();
|
leaveDeepBailCall();
|
||||||
|
|
||||||
// Guard that the call succeeded and builtinStatus is still 0.
|
// Guard that the call succeeded and builtinStatus is still 0.
|
||||||
@ -10577,7 +10577,7 @@ TraceRecorder::emitNativePropertyOp(JSScope* scope, JSScopeProperty* sprop, LIns
|
|||||||
// lost! Therefore this can only be used for setters of shared properties.
|
// lost! Therefore this can only be used for setters of shared properties.
|
||||||
// In that case we ignore the result value anyway.
|
// In that case we ignore the result value anyway.
|
||||||
LIns* status_ins = lir->insLoad(LIR_ld, lirbuf->state,
|
LIns* status_ins = lir->insLoad(LIR_ld, lirbuf->state,
|
||||||
(int) offsetof(InterpState, builtinStatus), ACC_OTHER);
|
(int) offsetof(TracerState, builtinStatus), ACC_OTHER);
|
||||||
propagateFailureToBuiltinStatus(ok_ins, status_ins);
|
propagateFailureToBuiltinStatus(ok_ins, status_ins);
|
||||||
guard(true, lir->insEqI_0(status_ins), STATUS_EXIT);
|
guard(true, lir->insEqI_0(status_ins), STATUS_EXIT);
|
||||||
|
|
||||||
@ -10610,7 +10610,7 @@ TraceRecorder::emitNativeCall(JSSpecializedNative* sn, uintN argc, LIns* args[],
|
|||||||
|
|
||||||
// Immediately unroot the vp as soon we return since we might deep bail next.
|
// Immediately unroot the vp as soon we return since we might deep bail next.
|
||||||
if (rooted)
|
if (rooted)
|
||||||
lir->insStore(INS_NULL(), lirbuf->state, offsetof(InterpState, nativeVp), ACC_OTHER);
|
lir->insStore(INS_NULL(), lirbuf->state, offsetof(TracerState, nativeVp), ACC_OTHER);
|
||||||
|
|
||||||
rval_ins = res_ins;
|
rval_ins = res_ins;
|
||||||
switch (JSTN_ERRTYPE(sn)) {
|
switch (JSTN_ERRTYPE(sn)) {
|
||||||
@ -10964,8 +10964,8 @@ TraceRecorder::callNative(uintN argc, JSOp mode)
|
|||||||
// nativeVpLen immediately before emitting the call code. This way we avoid
|
// nativeVpLen immediately before emitting the call code. This way we avoid
|
||||||
// leaving trace with a bogus nativeVp because we fall off trace while unboxing
|
// leaving trace with a bogus nativeVp because we fall off trace while unboxing
|
||||||
// values into the stack buffer.
|
// values into the stack buffer.
|
||||||
lir->insStore(INS_CONST(vplen), lirbuf->state, offsetof(InterpState, nativeVpLen), ACC_OTHER);
|
lir->insStore(INS_CONST(vplen), lirbuf->state, offsetof(TracerState, nativeVpLen), ACC_OTHER);
|
||||||
lir->insStore(invokevp_ins, lirbuf->state, offsetof(InterpState, nativeVp), ACC_OTHER);
|
lir->insStore(invokevp_ins, lirbuf->state, offsetof(TracerState, nativeVp), ACC_OTHER);
|
||||||
|
|
||||||
// argc is the original argc here. It is used to calculate where to place
|
// argc is the original argc here. It is used to calculate where to place
|
||||||
// the return value.
|
// the return value.
|
||||||
@ -11459,7 +11459,7 @@ TraceRecorder::setCallProp(JSObject *callobj, LIns *callobj_ins, JSScopeProperty
|
|||||||
|
|
||||||
// Guard that we are not changing the type of the slot we are storing to.
|
// Guard that we are not changing the type of the slot we are storing to.
|
||||||
LIns *callstackBase_ins = lir->insLoad(LIR_ldp, lirbuf->state,
|
LIns *callstackBase_ins = lir->insLoad(LIR_ldp, lirbuf->state,
|
||||||
offsetof(InterpState, callstackBase), ACC_OTHER);
|
offsetof(TracerState, callstackBase), ACC_OTHER);
|
||||||
LIns *frameInfo_ins = lir->insLoad(LIR_ldp, callstackBase_ins, 0, ACC_OTHER);
|
LIns *frameInfo_ins = lir->insLoad(LIR_ldp, callstackBase_ins, 0, ACC_OTHER);
|
||||||
LIns *typemap_ins = lir->ins2(LIR_piadd, frameInfo_ins, INS_CONSTWORD(sizeof(FrameInfo)));
|
LIns *typemap_ins = lir->ins2(LIR_piadd, frameInfo_ins, INS_CONSTWORD(sizeof(FrameInfo)));
|
||||||
LIns *type_ins = lir->insLoad(LIR_ldzb,
|
LIns *type_ins = lir->insLoad(LIR_ldzb,
|
||||||
@ -11475,7 +11475,7 @@ TraceRecorder::setCallProp(JSObject *callobj, LIns *callobj_ins, JSScopeProperty
|
|||||||
|
|
||||||
// Store to the native stack slot.
|
// Store to the native stack slot.
|
||||||
LIns *stackBase_ins = lir->insLoad(LIR_ldp, lirbuf->state,
|
LIns *stackBase_ins = lir->insLoad(LIR_ldp, lirbuf->state,
|
||||||
offsetof(InterpState, stackBase), ACC_OTHER);
|
offsetof(TracerState, stackBase), ACC_OTHER);
|
||||||
LIns *storeValue_ins = isPromoteInt(v_ins) ? demote(lir, v_ins) : v_ins;
|
LIns *storeValue_ins = isPromoteInt(v_ins) ? demote(lir, v_ins) : v_ins;
|
||||||
lir->insStore(storeValue_ins,
|
lir->insStore(storeValue_ins,
|
||||||
lir->ins2(LIR_piadd, stackBase_ins, lir->insUI2P(offset_ins)), 0, ACC_STORE_ANY);
|
lir->ins2(LIR_piadd, stackBase_ins, lir->insUI2P(offset_ins)), 0, ACC_STORE_ANY);
|
||||||
@ -11593,7 +11593,7 @@ GetPropertyByName(JSContext* cx, JSObject* obj, JSString** namep, jsval* vp)
|
|||||||
SetBuiltinError(cx);
|
SetBuiltinError(cx);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return cx->interpState->builtinStatus == 0;
|
return cx->tracerState->builtinStatus == 0;
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_4(static, BOOL_FAIL, GetPropertyByName, CONTEXT, OBJECT, STRINGPTR, JSVALPTR,
|
JS_DEFINE_CALLINFO_4(static, BOOL_FAIL, GetPropertyByName, CONTEXT, OBJECT, STRINGPTR, JSVALPTR,
|
||||||
0, ACC_STORE_ANY)
|
0, ACC_STORE_ANY)
|
||||||
@ -11658,7 +11658,7 @@ GetPropertyByIndex(JSContext* cx, JSObject* obj, int32 index, jsval* vp)
|
|||||||
SetBuiltinError(cx);
|
SetBuiltinError(cx);
|
||||||
return JS_FALSE;
|
return JS_FALSE;
|
||||||
}
|
}
|
||||||
return cx->interpState->builtinStatus == 0;
|
return cx->tracerState->builtinStatus == 0;
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_4(static, BOOL_FAIL, GetPropertyByIndex, CONTEXT, OBJECT, INT32, JSVALPTR, 0,
|
JS_DEFINE_CALLINFO_4(static, BOOL_FAIL, GetPropertyByIndex, CONTEXT, OBJECT, INT32, JSVALPTR, 0,
|
||||||
ACC_STORE_ANY)
|
ACC_STORE_ANY)
|
||||||
@ -11686,7 +11686,7 @@ GetPropertyById(JSContext* cx, JSObject* obj, jsid id, jsval* vp)
|
|||||||
SetBuiltinError(cx);
|
SetBuiltinError(cx);
|
||||||
return JS_FALSE;
|
return JS_FALSE;
|
||||||
}
|
}
|
||||||
return cx->interpState->builtinStatus == 0;
|
return cx->tracerState->builtinStatus == 0;
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_4(static, BOOL_FAIL, GetPropertyById, CONTEXT, OBJECT, JSVAL, JSVALPTR,
|
JS_DEFINE_CALLINFO_4(static, BOOL_FAIL, GetPropertyById, CONTEXT, OBJECT, JSVAL, JSVALPTR,
|
||||||
0, ACC_STORE_ANY)
|
0, ACC_STORE_ANY)
|
||||||
@ -11742,7 +11742,7 @@ GetPropertyWithNativeGetter(JSContext* cx, JSObject* obj, JSScopeProperty* sprop
|
|||||||
SetBuiltinError(cx);
|
SetBuiltinError(cx);
|
||||||
return JS_FALSE;
|
return JS_FALSE;
|
||||||
}
|
}
|
||||||
return cx->interpState->builtinStatus == 0;
|
return cx->tracerState->builtinStatus == 0;
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_4(static, BOOL_FAIL, GetPropertyWithNativeGetter,
|
JS_DEFINE_CALLINFO_4(static, BOOL_FAIL, GetPropertyWithNativeGetter,
|
||||||
CONTEXT, OBJECT, SCOPEPROP, JSVALPTR, 0, ACC_STORE_ANY)
|
CONTEXT, OBJECT, SCOPEPROP, JSVALPTR, 0, ACC_STORE_ANY)
|
||||||
@ -11944,7 +11944,7 @@ SetPropertyByName(JSContext* cx, JSObject* obj, JSString** namep, jsval* vp)
|
|||||||
SetBuiltinError(cx);
|
SetBuiltinError(cx);
|
||||||
return JS_FALSE;
|
return JS_FALSE;
|
||||||
}
|
}
|
||||||
return cx->interpState->builtinStatus == 0;
|
return cx->tracerState->builtinStatus == 0;
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_4(static, BOOL_FAIL, SetPropertyByName, CONTEXT, OBJECT, STRINGPTR, JSVALPTR,
|
JS_DEFINE_CALLINFO_4(static, BOOL_FAIL, SetPropertyByName, CONTEXT, OBJECT, STRINGPTR, JSVALPTR,
|
||||||
0, ACC_STORE_ANY)
|
0, ACC_STORE_ANY)
|
||||||
@ -11960,7 +11960,7 @@ InitPropertyByName(JSContext* cx, JSObject* obj, JSString** namep, jsval val)
|
|||||||
SetBuiltinError(cx);
|
SetBuiltinError(cx);
|
||||||
return JS_FALSE;
|
return JS_FALSE;
|
||||||
}
|
}
|
||||||
return cx->interpState->builtinStatus == 0;
|
return cx->tracerState->builtinStatus == 0;
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_4(static, BOOL_FAIL, InitPropertyByName, CONTEXT, OBJECT, STRINGPTR, JSVAL,
|
JS_DEFINE_CALLINFO_4(static, BOOL_FAIL, InitPropertyByName, CONTEXT, OBJECT, STRINGPTR, JSVAL,
|
||||||
0, ACC_STORE_ANY)
|
0, ACC_STORE_ANY)
|
||||||
@ -12002,7 +12002,7 @@ SetPropertyByIndex(JSContext* cx, JSObject* obj, int32 index, jsval* vp)
|
|||||||
SetBuiltinError(cx);
|
SetBuiltinError(cx);
|
||||||
return JS_FALSE;
|
return JS_FALSE;
|
||||||
}
|
}
|
||||||
return cx->interpState->builtinStatus == 0;
|
return cx->tracerState->builtinStatus == 0;
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_4(static, BOOL_FAIL, SetPropertyByIndex, CONTEXT, OBJECT, INT32, JSVALPTR, 0,
|
JS_DEFINE_CALLINFO_4(static, BOOL_FAIL, SetPropertyByIndex, CONTEXT, OBJECT, INT32, JSVALPTR, 0,
|
||||||
ACC_STORE_ANY)
|
ACC_STORE_ANY)
|
||||||
@ -12018,7 +12018,7 @@ InitPropertyByIndex(JSContext* cx, JSObject* obj, int32 index, jsval val)
|
|||||||
SetBuiltinError(cx);
|
SetBuiltinError(cx);
|
||||||
return JS_FALSE;
|
return JS_FALSE;
|
||||||
}
|
}
|
||||||
return cx->interpState->builtinStatus == 0;
|
return cx->tracerState->builtinStatus == 0;
|
||||||
}
|
}
|
||||||
JS_DEFINE_CALLINFO_4(static, BOOL_FAIL, InitPropertyByIndex, CONTEXT, OBJECT, INT32, JSVAL, 0,
|
JS_DEFINE_CALLINFO_4(static, BOOL_FAIL, InitPropertyByIndex, CONTEXT, OBJECT, INT32, JSVAL, 0,
|
||||||
ACC_STORE_ANY)
|
ACC_STORE_ANY)
|
||||||
@ -12732,7 +12732,7 @@ TraceRecorder::record_NativeCallComplete()
|
|||||||
lir->insStore(INS_NULL(), cx_ins, (int) offsetof(JSContext, bailExit), ACC_OTHER);
|
lir->insStore(INS_NULL(), cx_ins, (int) offsetof(JSContext, bailExit), ACC_OTHER);
|
||||||
|
|
||||||
LIns* status = lir->insLoad(LIR_ld, lirbuf->state,
|
LIns* status = lir->insLoad(LIR_ld, lirbuf->state,
|
||||||
(int) offsetof(InterpState, builtinStatus), ACC_OTHER);
|
(int) offsetof(TracerState, builtinStatus), ACC_OTHER);
|
||||||
if (pendingSpecializedNative == &generatedSpecializedNative) {
|
if (pendingSpecializedNative == &generatedSpecializedNative) {
|
||||||
LIns* ok_ins = v_ins;
|
LIns* ok_ins = v_ins;
|
||||||
|
|
||||||
@ -13889,7 +13889,7 @@ TraceRecorder::record_JSOP_INSTANCEOF()
|
|||||||
stack(-2, lir->insCall(&HasInstance_ci, args));
|
stack(-2, lir->insCall(&HasInstance_ci, args));
|
||||||
LIns* status_ins = lir->insLoad(LIR_ld,
|
LIns* status_ins = lir->insLoad(LIR_ld,
|
||||||
lirbuf->state,
|
lirbuf->state,
|
||||||
offsetof(InterpState, builtinStatus), ACC_OTHER);
|
offsetof(TracerState, builtinStatus), ACC_OTHER);
|
||||||
pendingGuardCondition = lir->insEqI_0(status_ins);
|
pendingGuardCondition = lir->insEqI_0(status_ins);
|
||||||
leaveDeepBailCall();
|
leaveDeepBailCall();
|
||||||
|
|
||||||
|
@ -774,7 +774,7 @@ struct ArgsPrivateNative {
|
|||||||
static JS_INLINE void
|
static JS_INLINE void
|
||||||
SetBuiltinError(JSContext *cx)
|
SetBuiltinError(JSContext *cx)
|
||||||
{
|
{
|
||||||
cx->interpState->builtinStatus |= BUILTIN_ERROR;
|
cx->tracerState->builtinStatus |= BUILTIN_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG_RECORDING_STATUS_NOT_BOOL
|
#ifdef DEBUG_RECORDING_STATUS_NOT_BOOL
|
||||||
@ -953,7 +953,7 @@ class TraceRecorder
|
|||||||
/* The LIR-generation pipeline used to build |fragment|. */
|
/* The LIR-generation pipeline used to build |fragment|. */
|
||||||
nanojit::LirWriter* const lir;
|
nanojit::LirWriter* const lir;
|
||||||
|
|
||||||
/* Instructions yielding the corresponding trace-const members of InterpState. */
|
/* Instructions yielding the corresponding trace-const members of TracerState. */
|
||||||
nanojit::LIns* const cx_ins;
|
nanojit::LIns* const cx_ins;
|
||||||
nanojit::LIns* const eos_ins;
|
nanojit::LIns* const eos_ins;
|
||||||
nanojit::LIns* const eor_ins;
|
nanojit::LIns* const eor_ins;
|
||||||
|
Loading…
Reference in New Issue
Block a user