[JAEGER] Added JSOP_GETUPVAR, JSOP_CALLUPVAR.

This commit is contained in:
David Anderson 2010-06-05 17:40:42 -07:00
parent 646a599539
commit 6caf036c24
3 changed files with 25 additions and 0 deletions

View File

@ -730,6 +730,22 @@ mjit::Compiler::generateMethod()
}
END_CASE(JSOP_CALLDSLOT)
BEGIN_CASE(JSOP_GETUPVAR)
BEGIN_CASE(JSOP_CALLUPVAR)
{
uint32 index = GET_UINT16(PC);
JSUpvarArray *uva = script->upvars();
JS_ASSERT(index < uva->length);
prepareStubCall();
masm.move(Imm32(uva->vector[index]), Registers::ArgReg1);
stubCall(stubs::GetUpvar, Uses(0), Defs(1));
frame.pushSynced();
if (op == JSOP_CALLUPVAR)
frame.push(NullTag());
}
END_CASE(JSOP_CALLUPVAR)
BEGIN_CASE(JSOP_UINT24)
frame.push(Value(Int32Tag((int32_t) GET_UINT24(PC))));
END_CASE(JSOP_UINT24)

View File

@ -1793,3 +1793,11 @@ stubs::InitElem(VMFrame &f, uint32 last)
}
}
void JS_FASTCALL
stubs::GetUpvar(VMFrame &f, uint32 cookie)
{
/* :FIXME: We can do better, this stub isn't needed. */
uint32 staticLevel = f.fp->script->staticLevel;
f.regs.sp[0] = js_GetUpvar(f.cx, staticLevel, cookie);
}

View File

@ -64,6 +64,7 @@ void JS_FASTCALL Name(VMFrame &f, uint32 index);
void JS_FASTCALL GetElem(VMFrame &f);
void JS_FASTCALL SetElem(VMFrame &f);
void JS_FASTCALL CallName(VMFrame &f, uint32 index);
void JS_FASTCALL GetUpvar(VMFrame &f, uint32 index);
void JS_FASTCALL DefFun(VMFrame &f, uint32 index);
void JS_FASTCALL VpInc(VMFrame &f, Value *vp);