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);
|
||||
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)
|
||||
frame.pop();
|
||||
frame.push(UndefinedTag());
|
||||
|
@ -139,6 +139,7 @@ class Compiler
|
||||
void jsop_bitop(JSOp op);
|
||||
void jsop_globalinc(JSOp op, uint32 index);
|
||||
void jsop_relational(JSOp op, BoolStub stub, jsbytecode *target, JSOp fused);
|
||||
void jsop_neg();
|
||||
|
||||
#define STUB_CALL_TYPE(type) \
|
||||
Call stubCall(type stub, Uses uses, Defs defs) { \
|
||||
|
@ -1621,3 +1621,13 @@ stubs::This(VMFrame &f)
|
||||
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 Div(VMFrame &f);
|
||||
void JS_FASTCALL Mod(VMFrame &f);
|
||||
void JS_FASTCALL Neg(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