зеркало из https://github.com/mozilla/gecko-dev.git
Bug 597976 Make it able to build TraceJIT w/o MethodJIT r=dvander
This commit is contained in:
Родитель
62c2f3b32a
Коммит
09041848f2
|
@ -2648,8 +2648,6 @@ AC_SUBST(ENABLE_METHODJIT)
|
|||
|
||||
if test "$ENABLE_METHODJIT"; then
|
||||
AC_DEFINE(JS_METHODJIT)
|
||||
else
|
||||
ENABLE_TRACEJIT=
|
||||
fi
|
||||
|
||||
if test "$ENABLE_MONOIC"; then
|
||||
|
|
|
@ -2139,7 +2139,7 @@ Interpret(JSContext *cx, JSStackFrame *entryFrame, uintN inlineCallCount, uintN
|
|||
#define TRACE_RECORDER(cx) (false)
|
||||
#endif
|
||||
|
||||
#ifdef JS_METHODJIT
|
||||
#if defined(JS_TRACER) && defined(JS_METHODJIT)
|
||||
# define LEAVE_ON_SAFE_POINT() \
|
||||
do { \
|
||||
JS_ASSERT_IF(leaveOnSafePoint, !TRACE_RECORDER(cx)); \
|
||||
|
@ -2202,8 +2202,6 @@ Interpret(JSContext *cx, JSStackFrame *entryFrame, uintN inlineCallCount, uintN
|
|||
|
||||
#if defined(JS_TRACER) && defined(JS_METHODJIT)
|
||||
bool leaveOnSafePoint = !!(interpFlags & JSINTERP_SAFEPOINT);
|
||||
#endif
|
||||
#ifdef JS_METHODJIT
|
||||
# define CLEAR_LEAVE_ON_TRACE_POINT() ((void) (leaveOnSafePoint = false))
|
||||
#else
|
||||
# define CLEAR_LEAVE_ON_TRACE_POINT() ((void) 0)
|
||||
|
@ -2344,8 +2342,10 @@ Interpret(JSContext *cx, JSStackFrame *entryFrame, uintN inlineCallCount, uintN
|
|||
case ARECORD_ABORTED:
|
||||
case ARECORD_COMPLETED:
|
||||
case ARECORD_STOP:
|
||||
#ifdef JS_METHODJIT
|
||||
leaveOnSafePoint = true;
|
||||
LEAVE_ON_SAFE_POINT();
|
||||
#endif
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -2404,9 +2404,7 @@ ADD_EMPTY_CASE(JSOP_UNUSED180)
|
|||
END_EMPTY_CASES
|
||||
|
||||
BEGIN_CASE(JSOP_TRACE)
|
||||
#ifdef JS_METHODJIT
|
||||
LEAVE_ON_SAFE_POINT();
|
||||
#endif
|
||||
END_CASE(JSOP_TRACE)
|
||||
|
||||
/* ADD_EMPTY_CASE is not used here as JSOP_LINENO_LENGTH == 3. */
|
||||
|
@ -2557,7 +2555,7 @@ BEGIN_CASE(JSOP_STOP)
|
|||
if (regs.fp->isConstructing() && regs.fp->returnValue().isPrimitive())
|
||||
regs.fp->setReturnValue(ObjectValue(regs.fp->constructorThis()));
|
||||
|
||||
#ifdef JS_TRACER
|
||||
#if defined(JS_TRACER) && defined(JS_METHODJIT)
|
||||
/* Hack: re-push rval so either JIT will read it properly. */
|
||||
regs.fp->setBailedAtReturn();
|
||||
if (TRACE_RECORDER(cx)) {
|
||||
|
@ -6734,7 +6732,7 @@ END_CASE(JSOP_ARRAYPUSH)
|
|||
goto error;
|
||||
}
|
||||
|
||||
#ifdef JS_METHODJIT
|
||||
#if defined(JS_TRACER) && defined(JS_METHODJIT)
|
||||
stop_recording:
|
||||
#endif
|
||||
JS_ASSERT(cx->regs == ®s);
|
||||
|
|
|
@ -2505,6 +2505,7 @@ TraceRecorder::TraceRecorder(JSContext* cx, VMSideExit* anchor, VMFragment* frag
|
|||
* the trace runs too few iterations to be worthwhile. Do this only if the methodjit
|
||||
* is on--otherwise we must try to trace as much as possible.
|
||||
*/
|
||||
#ifdef JS_METHODJIT
|
||||
if (cx->methodJitEnabled) {
|
||||
LIns* counterPtr = INS_CONSTPTR((void *) &JS_THREAD_DATA(cx)->iterationCounter);
|
||||
LIns* counterValue = lir->insLoad(LIR_ldi, counterPtr, 0, ACCSET_OTHER, LOAD_VOLATILE);
|
||||
|
@ -2514,6 +2515,7 @@ TraceRecorder::TraceRecorder(JSContext* cx, VMSideExit* anchor, VMFragment* frag
|
|||
lir->insStore(counterValue, counterPtr, 0, ACCSET_OTHER);
|
||||
branch->setTarget(lir->ins0(LIR_label));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -4497,7 +4499,7 @@ ProhibitFlush(JSContext* cx)
|
|||
static void
|
||||
ResetJITImpl(JSContext* cx)
|
||||
{
|
||||
if (!(cx->traceJitEnabled || cx->methodJitEnabled))
|
||||
if (!cx->traceJitEnabled)
|
||||
return;
|
||||
TraceMonitor* tm = &JS_TRACE_MONITOR(cx);
|
||||
debug_only_print0(LC_TMTracer, "Flushing cache.\n");
|
||||
|
@ -6653,6 +6655,7 @@ ExecuteTree(JSContext* cx, TreeFragment* f, uintN& inlineCallCount,
|
|||
bool ok = !(state.builtinStatus & BUILTIN_ERROR);
|
||||
JS_ASSERT_IF(cx->throwing, !ok);
|
||||
|
||||
#ifdef JS_METHODJIT
|
||||
if (cx->methodJitEnabled) {
|
||||
if (lr->exitType == LOOP_EXIT && JS_THREAD_DATA(cx)->iterationCounter < MIN_LOOP_ITERS) {
|
||||
debug_only_printf(LC_TMTracer, "tree %p executed only %d iterations, blacklisting\n",
|
||||
|
@ -6660,6 +6663,7 @@ ExecuteTree(JSContext* cx, TreeFragment* f, uintN& inlineCallCount,
|
|||
Blacklist((jsbytecode *)f->ip);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
return ok;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче