зеркало из https://github.com/mozilla/gecko-dev.git
Fix method-JIT debug mode bugs and add more testing capability (bug 598444, r=sstangl).
This commit is contained in:
Родитель
0390be7dbb
Коммит
11ad4b2679
|
@ -1133,7 +1133,7 @@ js_PutCallObject(JSContext *cx, JSStackFrame *fp)
|
||||||
JS_STATIC_ASSERT(JS_INITIAL_NSLOTS == JSSLOT_PRIVATE + JSObject::CALL_RESERVED_SLOTS + 1);
|
JS_STATIC_ASSERT(JS_INITIAL_NSLOTS == JSSLOT_PRIVATE + JSObject::CALL_RESERVED_SLOTS + 1);
|
||||||
JSScript *script = fun->u.i.script;
|
JSScript *script = fun->u.i.script;
|
||||||
memcpy(callobj.dslots, fp->formalArgs(), nargs * sizeof(Value));
|
memcpy(callobj.dslots, fp->formalArgs(), nargs * sizeof(Value));
|
||||||
if (!script->jit || script->usesEval) {
|
if (!script->jit || script->usesEval || script->debugMode) {
|
||||||
memcpy(callobj.dslots + nargs, fp->slots(), nvars * sizeof(Value));
|
memcpy(callobj.dslots + nargs, fp->slots(), nvars * sizeof(Value));
|
||||||
} else if (script->jit) {
|
} else if (script->jit) {
|
||||||
for (uint32 i = 0; i < script->jit->nescaping; i++) {
|
for (uint32 i = 0; i < script->jit->nescaping; i++) {
|
||||||
|
|
|
@ -1964,7 +1964,6 @@ mjit::Compiler::emitUncachedCall(uint32 argc, bool callingNew)
|
||||||
ADD_CALLSITE(false);
|
ADD_CALLSITE(false);
|
||||||
|
|
||||||
Jump notCompiled = masm.branchTestPtr(Assembler::Zero, r0, r0);
|
Jump notCompiled = masm.branchTestPtr(Assembler::Zero, r0, r0);
|
||||||
stubcc.linkExitDirect(notCompiled, stubcc.masm.label());
|
|
||||||
|
|
||||||
masm.call(r0);
|
masm.call(r0);
|
||||||
#if (defined(JS_NO_FASTCALL) && defined(JS_CPU_X86)) || defined(_WIN64)
|
#if (defined(JS_NO_FASTCALL) && defined(JS_CPU_X86)) || defined(_WIN64)
|
||||||
|
@ -1980,6 +1979,7 @@ mjit::Compiler::emitUncachedCall(uint32 argc, bool callingNew)
|
||||||
frame.takeReg(JSReturnReg_Data);
|
frame.takeReg(JSReturnReg_Data);
|
||||||
frame.pushRegs(JSReturnReg_Type, JSReturnReg_Data);
|
frame.pushRegs(JSReturnReg_Type, JSReturnReg_Data);
|
||||||
|
|
||||||
|
stubcc.linkExitDirect(notCompiled, stubcc.masm.label());
|
||||||
stubcc.rejoin(Changes(0));
|
stubcc.rejoin(Changes(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -487,16 +487,18 @@ stubs::UncachedNewHelper(VMFrame &f, uint32 argc, UncachedCallResult *ucr)
|
||||||
|
|
||||||
/* Try to do a fast inline call before the general Invoke path. */
|
/* Try to do a fast inline call before the general Invoke path. */
|
||||||
if (IsFunctionObject(*vp, &ucr->fun) && ucr->fun->isInterpreted() &&
|
if (IsFunctionObject(*vp, &ucr->fun) && ucr->fun->isInterpreted() &&
|
||||||
!ucr->fun->script()->isEmpty()) {
|
!ucr->fun->script()->isEmpty())
|
||||||
|
{
|
||||||
|
if (!stubs::NewObject(f, argc))
|
||||||
|
return;
|
||||||
|
|
||||||
ucr->callee = &vp->toObject();
|
ucr->callee = &vp->toObject();
|
||||||
if (!UncachedInlineCall(f, JSFRAME_CONSTRUCTING, &ucr->codeAddr, argc))
|
if (!UncachedInlineCall(f, JSFRAME_CONSTRUCTING, &ucr->codeAddr, argc))
|
||||||
THROW();
|
THROW();
|
||||||
return;
|
} else {
|
||||||
|
if (!InvokeConstructor(cx, InvokeArgsAlreadyOnTheStack(vp, argc)))
|
||||||
|
THROW();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!InvokeConstructor(cx, InvokeArgsAlreadyOnTheStack(vp, argc)))
|
|
||||||
THROW();
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void * JS_FASTCALL
|
void * JS_FASTCALL
|
||||||
|
|
|
@ -558,7 +558,7 @@ static int
|
||||||
usage(void)
|
usage(void)
|
||||||
{
|
{
|
||||||
fprintf(gErrFile, "%s\n", JS_GetImplementationVersion());
|
fprintf(gErrFile, "%s\n", JS_GetImplementationVersion());
|
||||||
fprintf(gErrFile, "usage: js [-zKPswWxCij] [-t timeoutSeconds] [-c stackchunksize] [-o option] [-v version] [-f scriptfile] [-e script] [-S maxstacksize] "
|
fprintf(gErrFile, "usage: js [-zKPswWxCijmd] [-t timeoutSeconds] [-c stackchunksize] [-o option] [-v version] [-f scriptfile] [-e script] [-S maxstacksize] "
|
||||||
#ifdef JS_GC_ZEAL
|
#ifdef JS_GC_ZEAL
|
||||||
"[-Z gczeal] "
|
"[-Z gczeal] "
|
||||||
#endif
|
#endif
|
||||||
|
@ -836,6 +836,10 @@ ProcessArgs(JSContext *cx, JSObject *obj, char **argv, int argc)
|
||||||
gMaxStackSize = atoi(argv[i]);
|
gMaxStackSize = atoi(argv[i]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'd':
|
||||||
|
js_SetDebugMode(cx, JS_TRUE);
|
||||||
|
break;
|
||||||
|
|
||||||
case 'z':
|
case 'z':
|
||||||
obj = split_setup(cx, JS_FALSE);
|
obj = split_setup(cx, JS_FALSE);
|
||||||
if (!obj)
|
if (!obj)
|
||||||
|
|
|
@ -257,7 +257,7 @@ def parse_jitflags():
|
||||||
for flags in OPTIONS.jitflags.split(',') ]
|
for flags in OPTIONS.jitflags.split(',') ]
|
||||||
for flags in jitflags:
|
for flags in jitflags:
|
||||||
for flag in flags:
|
for flag in flags:
|
||||||
if flag not in ('-j', '-m'):
|
if flag not in ('-j', '-m', '-d'):
|
||||||
print('Invalid jit flag: "%s"'%flag)
|
print('Invalid jit flag: "%s"'%flag)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
return jitflags
|
return jitflags
|
||||||
|
|
Загрузка…
Ссылка в новой задаче