This commit is contained in:
Andrew Drake
2010-06-07 23:58:42 -07:00
57 changed files with 441 additions and 371 deletions

View File

@@ -547,18 +547,34 @@ mjit::Compiler::generateMethod()
jsop_nameinc(op, stubs::IncName, fullAtomIndex(PC));
END_CASE(JSOP_INCNAME)
BEGIN_CASE(JSOP_INCPROP)
jsop_propinc(op, stubs::IncProp, fullAtomIndex(PC));
END_CASE(JSOP_INCPROP)
BEGIN_CASE(JSOP_DECNAME)
jsop_nameinc(op, stubs::DecName, fullAtomIndex(PC));
END_CASE(JSOP_DECNAME)
BEGIN_CASE(JSOP_DECPROP)
jsop_propinc(op, stubs::DecProp, fullAtomIndex(PC));
END_CASE(JSOP_DECPROP)
BEGIN_CASE(JSOP_NAMEINC)
jsop_nameinc(op, stubs::NameInc, fullAtomIndex(PC));
END_CASE(JSOP_NAMEINC)
BEGIN_CASE(JSOP_PROPINC)
jsop_propinc(op, stubs::PropInc, fullAtomIndex(PC));
END_CASE(JSOP_PROPINC)
BEGIN_CASE(JSOP_NAMEDEC)
jsop_nameinc(op, stubs::NameDec, fullAtomIndex(PC));
END_CASE(JSOP_NAMEDEC)
BEGIN_CASE(JSOP_PROPDEC)
jsop_propinc(op, stubs::PropDec, fullAtomIndex(PC));
END_CASE(JSOP_PROPDEC)
BEGIN_CASE(JSOP_GETTHISPROP)
/* Push thisv onto stack. */
jsop_this();
@@ -825,6 +841,7 @@ mjit::Compiler::generateMethod()
BEGIN_CASE(JSOP_SETNAME)
BEGIN_CASE(JSOP_SETPROP)
BEGIN_CASE(JSOP_SETMETHOD)
prepareStubCall();
masm.move(Imm32(fullAtomIndex(PC)), Registers::ArgReg1);
stubCall(stubs::SetName, Uses(2), Defs(1));
@@ -922,6 +939,11 @@ mjit::Compiler::generateMethod()
goto done;
END_CASE(JSOP_STOP)
BEGIN_CASE(JSOP_CALLLOCAL)
frame.pushLocal(GET_SLOTNO(PC));
frame.push(NullTag());
END_CASE(JSOP_CALLLOCAL)
BEGIN_CASE(JSOP_INT8)
frame.push(Value(Int32Tag(GET_INT8(PC))));
END_CASE(JSOP_INT8)
@@ -1352,6 +1374,17 @@ mjit::Compiler::jsop_nameinc(JSOp op, VoidStubAtom stub, uint32 index)
frame.pushSynced();
}
void
mjit::Compiler::jsop_propinc(JSOp op, VoidStubAtom stub, uint32 index)
{
JSAtom *atom = script->getAtom(index);
prepareStubCall();
masm.move(ImmPtr(atom), Registers::ArgReg1);
stubCall(stub, Uses(1), Defs(1));
frame.pop();
frame.pushSynced();
}
/*
* This big nasty function emits a fast-path for native iterators, producing
* a temporary value on the stack for FORLOCAL,ARG,GLOBAL,etc ops to use.