diff --git a/js/src/methodjit/Compiler.cpp b/js/src/methodjit/Compiler.cpp index fd1708a01c7..7f9e5c29cab 100644 --- a/js/src/methodjit/Compiler.cpp +++ b/js/src/methodjit/Compiler.cpp @@ -1127,6 +1127,13 @@ mjit::Compiler::generateMethod() } END_CASE(JSOP_CALLDSLOT) + BEGIN_CASE(JSOP_ARGSUB) + prepareStubCall(); + masm.move(Imm32(GET_ARGNO(PC)), Registers::ArgReg1); + stubCall(stubs::ArgSub, Uses(0), Defs(1)); + frame.pushSynced(); + END_CASE(JSOP_ARGSUB) + BEGIN_CASE(JSOP_ARGCNT) prepareStubCall(); stubCall(stubs::ArgCnt, Uses(0), Defs(1)); diff --git a/js/src/methodjit/StubCalls.cpp b/js/src/methodjit/StubCalls.cpp index 36c7967c425..fa807c67f9a 100644 --- a/js/src/methodjit/StubCalls.cpp +++ b/js/src/methodjit/StubCalls.cpp @@ -2482,3 +2482,13 @@ stubs::Pos(VMFrame &f) THROW(); } +void JS_FASTCALL +stubs::ArgSub(VMFrame &f, uint32 n) +{ + jsid id = INT_TO_JSID(n); + Value rval; + if (!js_GetArgsProperty(f.cx, f.fp, id, &rval)) + THROW(); + f.regs.sp[0] = rval; +} + diff --git a/js/src/methodjit/StubCalls.h b/js/src/methodjit/StubCalls.h index 228c373fcc5..27be117af29 100644 --- a/js/src/methodjit/StubCalls.h +++ b/js/src/methodjit/StubCalls.h @@ -110,6 +110,7 @@ JSObject * JS_FASTCALL RegExp(VMFrame &f, JSObject *regex); JSObject * JS_FASTCALL Lambda(VMFrame &f, JSFunction *fun); JSObject * JS_FASTCALL FlatLambda(VMFrame &f, JSFunction *fun); void JS_FASTCALL Arguments(VMFrame &f); +void JS_FASTCALL ArgSub(VMFrame &f, uint32 n); void JS_FASTCALL EnterBlock(VMFrame &f, JSObject *obj); void JS_FASTCALL LeaveBlock(VMFrame &f);