mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
[JAEGER] Added JSOP_CONCATN.
This commit is contained in:
parent
54b2c073e5
commit
64882231ed
@ -932,6 +932,18 @@ mjit::Compiler::generateMethod()
|
|||||||
BEGIN_CASE(JSOP_TRACE)
|
BEGIN_CASE(JSOP_TRACE)
|
||||||
END_CASE(JSOP_TRACE)
|
END_CASE(JSOP_TRACE)
|
||||||
|
|
||||||
|
BEGIN_CASE(JSOP_CONCATN)
|
||||||
|
{
|
||||||
|
uint32 argc = GET_ARGC(PC);
|
||||||
|
prepareStubCall();
|
||||||
|
masm.move(Imm32(argc), Registers::ArgReg1);
|
||||||
|
stubCall(stubs::ConcatN, Uses(argc), Defs(1));
|
||||||
|
frame.popn(argc);
|
||||||
|
frame.takeReg(Registers::ReturnReg);
|
||||||
|
frame.pushTypedPayload(JSVAL_MASK32_STRING, Registers::ReturnReg);
|
||||||
|
}
|
||||||
|
END_CASE(JSOP_CONCATN)
|
||||||
|
|
||||||
BEGIN_CASE(JSOP_OBJTOSTR)
|
BEGIN_CASE(JSOP_OBJTOSTR)
|
||||||
jsop_objtostr();
|
jsop_objtostr();
|
||||||
END_CASE(JSOP_OBJTOSTR)
|
END_CASE(JSOP_OBJTOSTR)
|
||||||
|
@ -164,6 +164,7 @@ class Compiler
|
|||||||
STUB_CALL_TYPE(JSObjStubJSObj);
|
STUB_CALL_TYPE(JSObjStubJSObj);
|
||||||
STUB_CALL_TYPE(VoidStubAtom);
|
STUB_CALL_TYPE(VoidStubAtom);
|
||||||
STUB_CALL_TYPE(JSStrStub);
|
STUB_CALL_TYPE(JSStrStub);
|
||||||
|
STUB_CALL_TYPE(JSStrStubUInt32);
|
||||||
|
|
||||||
#undef STUB_CALL_TYPE
|
#undef STUB_CALL_TYPE
|
||||||
void prepareStubCall();
|
void prepareStubCall();
|
||||||
|
@ -193,6 +193,7 @@ typedef JSObject * (JS_FASTCALL *JSObjStubFun)(VMFrame &, JSFunction *);
|
|||||||
typedef JSObject * (JS_FASTCALL *JSObjStubJSObj)(VMFrame &, JSObject *);
|
typedef JSObject * (JS_FASTCALL *JSObjStubJSObj)(VMFrame &, JSObject *);
|
||||||
typedef void (JS_FASTCALL *VoidStubAtom)(VMFrame &, JSAtom *);
|
typedef void (JS_FASTCALL *VoidStubAtom)(VMFrame &, JSAtom *);
|
||||||
typedef JSString * (JS_FASTCALL *JSStrStub)(VMFrame &);
|
typedef JSString * (JS_FASTCALL *JSStrStub)(VMFrame &);
|
||||||
|
typedef JSString * (JS_FASTCALL *JSStrStubUInt32)(VMFrame &, uint32);
|
||||||
|
|
||||||
#define JS_UNJITTABLE_METHOD (reinterpret_cast<void*>(-1))
|
#define JS_UNJITTABLE_METHOD (reinterpret_cast<void*>(-1))
|
||||||
|
|
||||||
|
@ -2180,3 +2180,18 @@ stubs::StrictNe(VMFrame &f)
|
|||||||
return StrictlyEqual(f.cx, lhs, rhs) != true;
|
return StrictlyEqual(f.cx, lhs, rhs) != true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JSString * JS_FASTCALL
|
||||||
|
stubs::ConcatN(VMFrame &f, uint32 argc)
|
||||||
|
{
|
||||||
|
JSCharBuffer buf(f.cx);
|
||||||
|
for (Value *vp = f.regs.sp - argc; vp < f.regs.sp; vp++) {
|
||||||
|
JS_ASSERT(vp->isPrimitive());
|
||||||
|
if (!js_ValueToCharBuffer(f.cx, *vp, buf))
|
||||||
|
THROWV(NULL);
|
||||||
|
}
|
||||||
|
JSString *str = js_NewStringFromCharBuffer(f.cx, buf);
|
||||||
|
if (!str)
|
||||||
|
THROWV(NULL);
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -54,6 +54,7 @@ JSObject * JS_FASTCALL NewArray(VMFrame &f, uint32 len);
|
|||||||
void JS_FASTCALL InitElem(VMFrame &f, uint32 last);
|
void JS_FASTCALL InitElem(VMFrame &f, uint32 last);
|
||||||
void JS_FASTCALL InitProp(VMFrame &f, JSAtom *atom);
|
void JS_FASTCALL InitProp(VMFrame &f, JSAtom *atom);
|
||||||
void JS_FASTCALL EndInit(VMFrame &f);
|
void JS_FASTCALL EndInit(VMFrame &f);
|
||||||
|
JSString * JS_FASTCALL ConcatN(VMFrame &f, uint32 argc);
|
||||||
|
|
||||||
void * JS_FASTCALL Call(VMFrame &f, uint32 argc);
|
void * JS_FASTCALL Call(VMFrame &f, uint32 argc);
|
||||||
void * JS_FASTCALL New(VMFrame &f, uint32 argc);
|
void * JS_FASTCALL New(VMFrame &f, uint32 argc);
|
||||||
|
Loading…
Reference in New Issue
Block a user