зеркало из https://github.com/mozilla/gecko-dev.git
Backout changeset 8bd9d81db80a which landed without a bug
--HG-- extra : rebase_source : 69b0afc5aab63afeea06919db9c2e635e7c6f1dc
This commit is contained in:
Родитель
2477d04160
Коммит
65121c26cf
|
@ -283,7 +283,7 @@ struct AutoEnterCompilation
|
|||
{
|
||||
CompilerOutput *co = info.compilerOutput(cx);
|
||||
#ifdef JS_METHODJIT
|
||||
if (co->script->hasMJITInfo())
|
||||
if (co->script->hasJITInfo())
|
||||
co->mjit = co->script->getJIT(co->constructing, co->barriers);
|
||||
#endif
|
||||
info.outputIndex = RecompileInfo::NoCompilerRunning;
|
||||
|
|
|
@ -2430,7 +2430,7 @@ void
|
|||
JSScript::recompileForStepMode(FreeOp *fop)
|
||||
{
|
||||
#ifdef JS_METHODJIT
|
||||
if (hasMJITInfo()) {
|
||||
if (hasJITInfo()) {
|
||||
mjit::Recompiler::clearStackReferences(fop, this);
|
||||
mjit::ReleaseScriptCode(fop, this);
|
||||
}
|
||||
|
@ -2693,7 +2693,7 @@ JSScript::argumentsOptimizationFailed(JSContext *cx, JSScript *script_)
|
|||
}
|
||||
|
||||
#ifdef JS_METHODJIT
|
||||
if (script->hasMJITInfo()) {
|
||||
if (script->hasJITInfo()) {
|
||||
mjit::ExpandInlineFrames(cx->compartment);
|
||||
mjit::Recompiler::clearStackReferences(cx->runtime->defaultFreeOp(), script);
|
||||
mjit::ReleaseScriptCode(cx->runtime->defaultFreeOp(), script);
|
||||
|
|
|
@ -441,7 +441,7 @@ struct JSScript : public js::gc::Cell
|
|||
|
||||
private:
|
||||
#ifdef JS_METHODJIT
|
||||
JITScriptSet *mJITInfo;
|
||||
JITScriptSet *jitInfo;
|
||||
#endif
|
||||
js::HeapPtrFunction function_;
|
||||
js::HeapPtrObject enclosingScope_;
|
||||
|
@ -680,24 +680,24 @@ struct JSScript : public js::gc::Cell
|
|||
friend class js::mjit::CallCompiler;
|
||||
|
||||
public:
|
||||
bool hasMJITInfo() {
|
||||
return mJITInfo != NULL;
|
||||
bool hasJITInfo() {
|
||||
return jitInfo != NULL;
|
||||
}
|
||||
|
||||
static size_t offsetOfMJITInfo() { return offsetof(JSScript, mJITInfo); }
|
||||
static size_t offsetOfJITInfo() { return offsetof(JSScript, jitInfo); }
|
||||
|
||||
inline bool ensureHasMJITInfo(JSContext *cx);
|
||||
inline void destroyMJITInfo(js::FreeOp *fop);
|
||||
inline bool ensureHasJITInfo(JSContext *cx);
|
||||
inline void destroyJITInfo(js::FreeOp *fop);
|
||||
|
||||
JITScriptHandle *jitHandle(bool constructing, bool barriers) {
|
||||
JS_ASSERT(mJITInfo);
|
||||
JS_ASSERT(jitInfo);
|
||||
return constructing
|
||||
? (barriers ? &mJITInfo->jitHandleCtorBarriered : &mJITInfo->jitHandleCtor)
|
||||
: (barriers ? &mJITInfo->jitHandleNormalBarriered : &mJITInfo->jitHandleNormal);
|
||||
? (barriers ? &jitInfo->jitHandleCtorBarriered : &jitInfo->jitHandleCtor)
|
||||
: (barriers ? &jitInfo->jitHandleNormalBarriered : &jitInfo->jitHandleNormal);
|
||||
}
|
||||
|
||||
js::mjit::JITScript *getJIT(bool constructing, bool barriers) {
|
||||
if (!mJITInfo)
|
||||
if (!jitInfo)
|
||||
return NULL;
|
||||
JITScriptHandle *jith = jitHandle(constructing, barriers);
|
||||
return jith->isValid() ? jith->getValid() : NULL;
|
||||
|
|
|
@ -194,19 +194,19 @@ JSScript::hasClearedGlobal() const
|
|||
|
||||
#ifdef JS_METHODJIT
|
||||
inline bool
|
||||
JSScript::ensureHasMJITInfo(JSContext *cx)
|
||||
JSScript::ensureHasJITInfo(JSContext *cx)
|
||||
{
|
||||
if (mJITInfo)
|
||||
if (jitInfo)
|
||||
return true;
|
||||
mJITInfo = cx->new_<JITScriptSet>();
|
||||
return mJITInfo != NULL;
|
||||
jitInfo = cx->new_<JITScriptSet>();
|
||||
return jitInfo != NULL;
|
||||
}
|
||||
|
||||
inline void
|
||||
JSScript::destroyMJITInfo(js::FreeOp *fop)
|
||||
JSScript::destroyJITInfo(js::FreeOp *fop)
|
||||
{
|
||||
fop->delete_(mJITInfo);
|
||||
mJITInfo = NULL;
|
||||
fop->delete_(jitInfo);
|
||||
jitInfo = NULL;
|
||||
}
|
||||
#endif /* JS_METHODJIT */
|
||||
|
||||
|
|
|
@ -111,7 +111,7 @@ mjit::Compiler::compile()
|
|||
|
||||
CompileStatus status = performCompilation();
|
||||
if (status != Compile_Okay && status != Compile_Retry) {
|
||||
if (!outerScript->ensureHasMJITInfo(cx))
|
||||
if (!outerScript->ensureHasJITInfo(cx))
|
||||
return Compile_Error;
|
||||
JSScript::JITScriptHandle *jith = outerScript->jitHandle(isConstructing, cx->compartment->needsBarrier());
|
||||
JSScript::ReleaseCode(cx->runtime->defaultFreeOp(), jith);
|
||||
|
@ -930,7 +930,7 @@ mjit::CanMethodJIT(JSContext *cx, JSScript *script, jsbytecode *pc,
|
|||
if (frame->hasPushedSPSFrame() && !cx->runtime->spsProfiler.enabled())
|
||||
return Compile_Skipped;
|
||||
|
||||
if (script->hasMJITInfo()) {
|
||||
if (script->hasJITInfo()) {
|
||||
JSScript::JITScriptHandle *jith = script->jitHandle(construct, cx->compartment->needsBarrier());
|
||||
if (jith->isUnjittable())
|
||||
return Compile_Abort;
|
||||
|
@ -953,7 +953,7 @@ mjit::CanMethodJIT(JSContext *cx, JSScript *script, jsbytecode *pc,
|
|||
|
||||
uint64_t gcNumber = cx->runtime->gcNumber;
|
||||
|
||||
if (!script->ensureHasMJITInfo(cx))
|
||||
if (!script->ensureHasJITInfo(cx))
|
||||
return Compile_Error;
|
||||
|
||||
JSScript::JITScriptHandle *jith = script->jitHandle(construct, cx->compartment->needsBarrier());
|
||||
|
|
|
@ -1362,10 +1362,10 @@ JSScript::JITScriptHandle::staticAsserts()
|
|||
size_t
|
||||
JSScript::sizeOfJitScripts(JSMallocSizeOfFun mallocSizeOf)
|
||||
{
|
||||
if (!hasMJITInfo())
|
||||
if (!hasJITInfo())
|
||||
return 0;
|
||||
|
||||
size_t n = mallocSizeOf(mJITInfo);
|
||||
size_t n = mallocSizeOf(jitInfo);
|
||||
for (int constructing = 0; constructing <= 1; constructing++) {
|
||||
for (int barriers = 0; barriers <= 1; barriers++) {
|
||||
JITScript *jit = getJIT((bool) constructing, (bool) barriers);
|
||||
|
|
|
@ -870,7 +870,7 @@ CanMethodJIT(JSContext *cx, JSScript *script, jsbytecode *pc,
|
|||
inline void
|
||||
ReleaseScriptCode(FreeOp *fop, JSScript *script)
|
||||
{
|
||||
if (!script->hasMJITInfo())
|
||||
if (!script->hasJITInfo())
|
||||
return;
|
||||
|
||||
for (int constructing = 0; constructing <= 1; constructing++) {
|
||||
|
@ -881,7 +881,7 @@ ReleaseScriptCode(FreeOp *fop, JSScript *script)
|
|||
}
|
||||
}
|
||||
|
||||
script->destroyMJITInfo(fop);
|
||||
script->destroyJITInfo(fop);
|
||||
}
|
||||
|
||||
// Expand all stack frames inlined by the JIT within a compartment.
|
||||
|
|
|
@ -573,10 +573,10 @@ class CallCompiler : public BaseCompiler
|
|||
masm.loadPtr(scriptAddr, t0);
|
||||
|
||||
// Test that:
|
||||
// - script->mJITInfo is not NULL
|
||||
// - script->mJITInfo->jitHandle{Ctor,Normal}->value is neither NULL nor UNJITTABLE, and
|
||||
// - script->mJITInfo->jitHandle{Ctor,Normal}->value->arityCheckEntry is not NULL.
|
||||
masm.loadPtr(Address(t0, JSScript::offsetOfMJITInfo()), t0);
|
||||
// - script->jitInfo is not NULL
|
||||
// - script->jitInfo->jitHandle{Ctor,Normal}->value is neither NULL nor UNJITTABLE, and
|
||||
// - script->jitInfo->jitHandle{Ctor,Normal}->value->arityCheckEntry is not NULL.
|
||||
masm.loadPtr(Address(t0, JSScript::offsetOfJITInfo()), t0);
|
||||
Jump hasNoJitInfo = masm.branchPtr(Assembler::Equal, t0, ImmPtr(NULL));
|
||||
size_t offset = JSScript::JITScriptSet::jitHandleOffset(callingNew,
|
||||
f.cx->compartment->needsBarrier());
|
||||
|
|
|
@ -394,7 +394,7 @@ ClearAllFrames(JSCompartment *compartment)
|
|||
void
|
||||
Recompiler::clearStackReferences(FreeOp *fop, JSScript *script)
|
||||
{
|
||||
JS_ASSERT(script->hasMJITInfo());
|
||||
JS_ASSERT(script->hasJITInfo());
|
||||
|
||||
JaegerSpew(JSpew_Recompile, "recompiling script (file \"%s\") (line \"%d\") (length \"%d\")\n",
|
||||
script->filename, script->lineno, script->length);
|
||||
|
|
|
@ -233,7 +233,7 @@ void
|
|||
BreakpointSite::recompile(FreeOp *fop)
|
||||
{
|
||||
#ifdef JS_METHODJIT
|
||||
if (script->hasMJITInfo()) {
|
||||
if (script->hasJITInfo()) {
|
||||
mjit::Recompiler::clearStackReferences(fop, script);
|
||||
mjit::ReleaseScriptCode(fop, script);
|
||||
}
|
||||
|
|
|
@ -504,7 +504,7 @@ GlobalObject::clear(JSContext *cx)
|
|||
*/
|
||||
for (gc::CellIter i(cx->compartment, gc::FINALIZE_SCRIPT); !i.done(); i.next()) {
|
||||
JSScript *script = i.get<JSScript>();
|
||||
if (script->compileAndGo && script->hasMJITInfo() && script->hasClearedGlobal()) {
|
||||
if (script->compileAndGo && script->hasJITInfo() && script->hasClearedGlobal()) {
|
||||
mjit::Recompiler::clearStackReferences(cx->runtime->defaultFreeOp(), script);
|
||||
mjit::ReleaseScriptCode(cx->runtime->defaultFreeOp(), script);
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче