JSOP_ENDINIT fast path, obsoletes stub call. (r=dvander)

This commit is contained in:
Chris Leary 2010-06-22 22:40:55 -07:00
parent 30a3cc58b6
commit 0aca3bfb30
4 changed files with 14 additions and 14 deletions

View File

@ -956,8 +956,18 @@ mjit::Compiler::generateMethod()
END_CASE(JSOP_NEWINIT)
BEGIN_CASE(JSOP_ENDINIT)
prepareStubCall();
stubCall(stubs::EndInit, Uses(0), Defs(0));
{
FrameEntry *fe = frame.peek(-1);
RegisterID traversalReg = frame.allocReg();
JS_ASSERT(!fe->isConstant());
RegisterID objReg = frame.tempRegForData(fe);
masm.loadPtr(FrameAddress(offsetof(VMFrame, cx)), traversalReg);
masm.storePtr(objReg,
Address(traversalReg,
offsetof(JSContext,
weakRoots.finalizableNewborns[FINALIZE_OBJECT])));
frame.freeReg(traversalReg);
}
END_CASE(JSOP_ENDINIT)
BEGIN_CASE(JSOP_INITPROP)

View File

@ -228,8 +228,8 @@ class FrameState
/*
* Returns a register that is guaranteed to contain the frame entry's
* data payload. The compiler may not modify the contents of the register,
* though it may explicitly free it.
* data payload. The compiler may not modify the contents of the register.
* The compiler should NOT explicitly free it.
*/
inline RegisterID tempRegForData(FrameEntry *fe);

View File

@ -1382,15 +1382,6 @@ stubs::NewInitObject(VMFrame &f, uint32 empty)
return obj;
}
void JS_FASTCALL
stubs::EndInit(VMFrame &f)
{
JS_ASSERT(f.regs.sp - f.fp->base() >= 1);
const Value &lref = f.regs.sp[-1];
JS_ASSERT(lref.isObject());
f.cx->weakRoots.finalizableNewborns[FINALIZE_OBJECT] = &lref.asObject();
}
void JS_FASTCALL
stubs::InitElem(VMFrame &f, uint32 last)
{

View File

@ -55,7 +55,6 @@ void JS_FASTCALL Interrupt(VMFrame &f);
void JS_FASTCALL InitElem(VMFrame &f, uint32 last);
void JS_FASTCALL InitProp(VMFrame &f, JSAtom *atom);
void JS_FASTCALL InitMethod(VMFrame &f, JSAtom *atom);
void JS_FASTCALL EndInit(VMFrame &f);
JSString * JS_FASTCALL ConcatN(VMFrame &f, uint32 argc);
void * JS_FASTCALL Call(VMFrame &f, uint32 argc);