mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
[JAEGER] Added JSOP_NEG.
This commit is contained in:
parent
e0f4979989
commit
1884924c8f
@ -474,6 +474,21 @@ mjit::Compiler::generateMethod()
|
|||||||
jsop_binary(op, stubs::Mod);
|
jsop_binary(op, stubs::Mod);
|
||||||
END_CASE(JSOP_MOD)
|
END_CASE(JSOP_MOD)
|
||||||
|
|
||||||
|
BEGIN_CASE(JSOP_NEG)
|
||||||
|
{
|
||||||
|
FrameEntry *top = frame.peek(-1);
|
||||||
|
if (top->isConstant() && top->getValue().isPrimitive()) {
|
||||||
|
double d;
|
||||||
|
ValueToNumber(cx, top->getValue(), &d);
|
||||||
|
d = -d;
|
||||||
|
frame.pop();
|
||||||
|
frame.push(DoubleTag(d));
|
||||||
|
} else {
|
||||||
|
jsop_neg();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
END_CASE(JSOP_NEG)
|
||||||
|
|
||||||
BEGIN_CASE(JSOP_VOID)
|
BEGIN_CASE(JSOP_VOID)
|
||||||
frame.pop();
|
frame.pop();
|
||||||
frame.push(UndefinedTag());
|
frame.push(UndefinedTag());
|
||||||
|
@ -139,6 +139,7 @@ class Compiler
|
|||||||
void jsop_bitop(JSOp op);
|
void jsop_bitop(JSOp op);
|
||||||
void jsop_globalinc(JSOp op, uint32 index);
|
void jsop_globalinc(JSOp op, uint32 index);
|
||||||
void jsop_relational(JSOp op, BoolStub stub, jsbytecode *target, JSOp fused);
|
void jsop_relational(JSOp op, BoolStub stub, jsbytecode *target, JSOp fused);
|
||||||
|
void jsop_neg();
|
||||||
|
|
||||||
#define STUB_CALL_TYPE(type) \
|
#define STUB_CALL_TYPE(type) \
|
||||||
Call stubCall(type stub, Uses uses, Defs defs) { \
|
Call stubCall(type stub, Uses uses, Defs defs) { \
|
||||||
|
@ -1621,3 +1621,13 @@ stubs::This(VMFrame &f)
|
|||||||
f.regs.sp[0] = f.fp->thisv;
|
f.regs.sp[0] = f.fp->thisv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void JS_FASTCALL
|
||||||
|
stubs::Neg(VMFrame &f)
|
||||||
|
{
|
||||||
|
double d;
|
||||||
|
if (!ValueToNumber(f.cx, f.regs.sp[-1], &d))
|
||||||
|
THROW();
|
||||||
|
d = -d;
|
||||||
|
f.regs.sp[-1].setNumber(d);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -81,6 +81,7 @@ void JS_FASTCALL Sub(VMFrame &f);
|
|||||||
void JS_FASTCALL Mul(VMFrame &f);
|
void JS_FASTCALL Mul(VMFrame &f);
|
||||||
void JS_FASTCALL Div(VMFrame &f);
|
void JS_FASTCALL Div(VMFrame &f);
|
||||||
void JS_FASTCALL Mod(VMFrame &f);
|
void JS_FASTCALL Mod(VMFrame &f);
|
||||||
|
void JS_FASTCALL Neg(VMFrame &f);
|
||||||
|
|
||||||
JSBool JS_FASTCALL ValueToBoolean(VMFrame &f);
|
JSBool JS_FASTCALL ValueToBoolean(VMFrame &f);
|
||||||
|
|
||||||
|
@ -484,3 +484,12 @@ mjit::Compiler::jsop_relational(JSOp op, BoolStub stub, jsbytecode *target, JSOp
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
mjit::Compiler::jsop_neg()
|
||||||
|
{
|
||||||
|
prepareStubCall();
|
||||||
|
stubCall(stubs::Neg, Uses(1), Defs(1));
|
||||||
|
frame.pop();
|
||||||
|
frame.pushSynced();
|
||||||
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user