[JAEGER] Added JSOP_NEG.

This commit is contained in:
David Anderson 2010-06-05 14:26:00 -07:00
parent e0f4979989
commit 1884924c8f
5 changed files with 36 additions and 0 deletions

View File

@ -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());

View File

@ -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) { \

View File

@ -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);
}

View File

@ -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);

View File

@ -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();
}