[JAEGER] Update JM2 for fatval merge.
This commit is contained in:
@@ -955,7 +955,7 @@ mjit::Compiler::generateMethod()
|
||||
stubCall(stubs::NewInitObject, Uses(0), Defs(1));
|
||||
}
|
||||
frame.takeReg(Registers::ReturnReg);
|
||||
frame.pushTypedPayload(JSVAL_MASK32_NONFUNOBJ, Registers::ReturnReg);
|
||||
frame.pushTypedPayload(JSVAL_TAG_NONFUNOBJ, Registers::ReturnReg);
|
||||
}
|
||||
END_CASE(JSOP_NEWINIT)
|
||||
|
||||
@@ -1095,7 +1095,7 @@ mjit::Compiler::generateMethod()
|
||||
masm.move(ImmPtr(fun), Registers::ArgReg1);
|
||||
stubCall(stubs::Lambda, Uses(0), Defs(1));
|
||||
frame.takeReg(Registers::ReturnReg);
|
||||
frame.pushTypedPayload(JSVAL_MASK32_FUNOBJ, Registers::ReturnReg);
|
||||
frame.pushTypedPayload(JSVAL_TAG_FUNOBJ, Registers::ReturnReg);
|
||||
}
|
||||
END_CASE(JSOP_LAMBDA)
|
||||
|
||||
@@ -1131,7 +1131,7 @@ mjit::Compiler::generateMethod()
|
||||
masm.move(ImmPtr(fun), Registers::ArgReg1);
|
||||
stubCall(stubs::DefLocalFun, Uses(0), Defs(0));
|
||||
frame.takeReg(Registers::ReturnReg);
|
||||
frame.pushTypedPayload(JSVAL_MASK32_FUNOBJ, Registers::ReturnReg);
|
||||
frame.pushTypedPayload(JSVAL_TAG_FUNOBJ, Registers::ReturnReg);
|
||||
frame.storeLocal(slot);
|
||||
frame.pop();
|
||||
}
|
||||
@@ -1159,7 +1159,7 @@ mjit::Compiler::generateMethod()
|
||||
masm.move(ImmPtr(regex), Registers::ArgReg1);
|
||||
stubCall(stubs::RegExp, Uses(0), Defs(1));
|
||||
frame.takeReg(Registers::ReturnReg);
|
||||
frame.pushTypedPayload(JSVAL_MASK32_NONFUNOBJ, Registers::ReturnReg);
|
||||
frame.pushTypedPayload(JSVAL_TAG_NONFUNOBJ, Registers::ReturnReg);
|
||||
}
|
||||
END_CASE(JSOP_REGEXP)
|
||||
|
||||
@@ -1251,7 +1251,7 @@ mjit::Compiler::generateMethod()
|
||||
stubCall(stubs::NewArray, Uses(len), Defs(1));
|
||||
frame.popn(len);
|
||||
frame.takeReg(Registers::ReturnReg);
|
||||
frame.pushTypedPayload(JSVAL_MASK32_NONFUNOBJ, Registers::ReturnReg);
|
||||
frame.pushTypedPayload(JSVAL_TAG_NONFUNOBJ, Registers::ReturnReg);
|
||||
}
|
||||
END_CASE(JSOP_NEWARRAY)
|
||||
|
||||
@@ -1262,7 +1262,7 @@ mjit::Compiler::generateMethod()
|
||||
masm.move(ImmPtr(fun), Registers::ArgReg1);
|
||||
stubCall(stubs::FlatLambda, Uses(0), Defs(1));
|
||||
frame.takeReg(Registers::ReturnReg);
|
||||
frame.pushTypedPayload(JSVAL_MASK32_FUNOBJ, Registers::ReturnReg);
|
||||
frame.pushTypedPayload(JSVAL_TAG_FUNOBJ, Registers::ReturnReg);
|
||||
}
|
||||
END_CASE(JSOP_LAMBDA_FC)
|
||||
|
||||
@@ -1290,7 +1290,7 @@ mjit::Compiler::generateMethod()
|
||||
stubCall(stubs::ConcatN, Uses(argc), Defs(1));
|
||||
frame.popn(argc);
|
||||
frame.takeReg(Registers::ReturnReg);
|
||||
frame.pushTypedPayload(JSVAL_MASK32_STRING, Registers::ReturnReg);
|
||||
frame.pushTypedPayload(JSVAL_TAG_STRING, Registers::ReturnReg);
|
||||
}
|
||||
END_CASE(JSOP_CONCATN)
|
||||
|
||||
@@ -1510,7 +1510,7 @@ mjit::Compiler::emitReturn()
|
||||
/* if (arguments) ... */
|
||||
Jump argsObj = masm.branch32(Assembler::Equal,
|
||||
masm.tagOf(Address(JSFrameReg, offsetof(JSStackFrame, argsval))),
|
||||
Imm32(JSVAL_MASK32_NONFUNOBJ));
|
||||
ImmTag(JSVAL_TAG_NONFUNOBJ));
|
||||
stubcc.linkExit(argsObj);
|
||||
stubcc.call(stubs::PutArgsObject);
|
||||
stubcc.rejoin(0);
|
||||
@@ -1573,7 +1573,7 @@ mjit::Compiler::inlineCallHelper(uint32 argc, bool callingNew)
|
||||
FrameEntry *fe = frame.peek(-int(argc + 2));
|
||||
bool typeKnown = fe->isTypeKnown();
|
||||
|
||||
if (typeKnown && fe->getTypeTag() != JSVAL_MASK32_FUNOBJ) {
|
||||
if (typeKnown && fe->getTypeTag() != JSVAL_TAG_FUNOBJ) {
|
||||
VoidPtrStubUInt32 stub = callingNew ? stubs::SlowNew : stubs::SlowCall;
|
||||
masm.move(Imm32(argc), Registers::ArgReg1);
|
||||
masm.stubCall(stub, PC, frame.stackDepth() + script->nfixed);
|
||||
@@ -1709,10 +1709,7 @@ mjit::Compiler::inlineCallHelper(uint32 argc, bool callingNew)
|
||||
* values. Just deal with this here.
|
||||
*/
|
||||
if (callingNew) {
|
||||
masm.move(JSReturnReg_Type, Registers::ReturnReg);
|
||||
masm.and32(Imm32(JSVAL_MASK32_OBJECT), Registers::ReturnReg);
|
||||
Jump primitive = masm.branch32(Assembler::BelowOrEqual, Registers::ReturnReg,
|
||||
Imm32(JSVAL_MASK32_CLEAR));
|
||||
Jump primitive = masm.testPrimitive(Assembler::Equal, JSReturnReg_Type);
|
||||
stubcc.linkExit(primitive);
|
||||
FrameEntry *fe = frame.peek(-int(argc + 1));
|
||||
Address thisv(frame.addressOf(fe));
|
||||
@@ -1808,7 +1805,7 @@ mjit::Compiler::emitStubCmpOp(BoolStub stub, jsbytecode *target, JSOp fused)
|
||||
|
||||
if (!target) {
|
||||
frame.takeReg(Registers::ReturnReg);
|
||||
frame.pushTypedPayload(JSVAL_MASK32_BOOLEAN, Registers::ReturnReg);
|
||||
frame.pushTypedPayload(JSVAL_TAG_BOOLEAN, Registers::ReturnReg);
|
||||
} else {
|
||||
JS_ASSERT(fused == JSOP_IFEQ || fused == JSOP_IFNE);
|
||||
|
||||
@@ -1858,7 +1855,7 @@ mjit::Compiler::jsop_length()
|
||||
{
|
||||
FrameEntry *top = frame.peek(-1);
|
||||
|
||||
if (top->isTypeKnown() && top->getTypeTag() == JSVAL_MASK32_STRING) {
|
||||
if (top->isTypeKnown() && top->getTypeTag() == JSVAL_TAG_STRING) {
|
||||
if (top->isConstant()) {
|
||||
JSString *str = top->getValue().asString();
|
||||
Value v;
|
||||
@@ -1869,7 +1866,7 @@ mjit::Compiler::jsop_length()
|
||||
RegisterID str = frame.ownRegForData(top);
|
||||
masm.loadPtr(Address(str, offsetof(JSString, mLength)), str);
|
||||
frame.pop();
|
||||
frame.pushTypedPayload(JSVAL_MASK32_INT32, str);
|
||||
frame.pushTypedPayload(JSVAL_TAG_INT32, str);
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -1892,11 +1889,11 @@ mjit::Compiler::jsop_getprop(JSAtom *atom, bool doTypeCheck)
|
||||
|
||||
/* If the incoming type will never PIC, take slow path. */
|
||||
if (top->isTypeKnown() &&
|
||||
(top->getTypeTag() != JSVAL_MASK32_FUNOBJ &&
|
||||
top->getTypeTag() != JSVAL_MASK32_NONFUNOBJ))
|
||||
(top->getTypeTag() != JSVAL_TAG_FUNOBJ &&
|
||||
top->getTypeTag() != JSVAL_TAG_NONFUNOBJ))
|
||||
{
|
||||
JS_ASSERT_IF(atom == cx->runtime->atomState.lengthAtom,
|
||||
top->getTypeTag() != JSVAL_MASK32_STRING);
|
||||
top->getTypeTag() != JSVAL_TAG_STRING);
|
||||
jsop_getprop_slow();
|
||||
return;
|
||||
}
|
||||
@@ -1918,13 +1915,13 @@ mjit::Compiler::jsop_getprop(JSAtom *atom, bool doTypeCheck)
|
||||
/* Guard that the type is an object. */
|
||||
Jump typeCheck;
|
||||
if (doTypeCheck && !top->isTypeKnown()) {
|
||||
JS_STATIC_ASSERT(JSVAL_MASK32_NONFUNOBJ < JSVAL_MASK32_FUNOBJ);
|
||||
JS_STATIC_ASSERT(JSVAL_TAG_NONFUNOBJ < JSVAL_TAG_FUNOBJ);
|
||||
RegisterID reg = frame.tempRegForType(top);
|
||||
pic.typeReg = reg;
|
||||
|
||||
/* Start the hot path where it's easy to patch it. */
|
||||
pic.hotPathBegin = masm.label();
|
||||
Jump j = masm.branch32(Assembler::Below, reg, Imm32(JSVAL_MASK32_NONFUNOBJ));
|
||||
Jump j = masm.branch32(Assembler::Below, reg, ImmTag(JSVAL_TAG_NONFUNOBJ));
|
||||
|
||||
pic.typeCheck = stubcc.masm.label();
|
||||
stubcc.linkExit(j);
|
||||
@@ -1994,7 +1991,7 @@ mjit::Compiler::jsop_callprop_generic(JSAtom *atom)
|
||||
PICGenInfo pic(ic::PICInfo::CALL);
|
||||
|
||||
/* Guard that the type is an object. */
|
||||
JS_STATIC_ASSERT(JSVAL_MASK32_NONFUNOBJ < JSVAL_MASK32_FUNOBJ);
|
||||
JS_STATIC_ASSERT(JSVAL_TAG_NONFUNOBJ < JSVAL_TAG_FUNOBJ);
|
||||
pic.typeReg = frame.copyTypeIntoReg(top);
|
||||
|
||||
/* Start the hot path where it's easy to patch it. */
|
||||
@@ -2006,7 +2003,7 @@ mjit::Compiler::jsop_callprop_generic(JSAtom *atom)
|
||||
* path to the final call. We need a label in between that jump, which
|
||||
* will be the target of patched jumps in the PIC.
|
||||
*/
|
||||
Jump typeCheck = masm.branch32(Assembler::Below, pic.typeReg, Imm32(JSVAL_MASK32_NONFUNOBJ));
|
||||
Jump typeCheck = masm.branch32(Assembler::Below, pic.typeReg, ImmTag(JSVAL_TAG_NONFUNOBJ));
|
||||
stubcc.linkExit(typeCheck);
|
||||
stubcc.leave();
|
||||
Jump typeCheckDone = stubcc.masm.jump();
|
||||
@@ -2080,7 +2077,7 @@ mjit::Compiler::jsop_callprop_str(JSAtom *atom)
|
||||
/* Force into a register because getprop won't expect a constant. */
|
||||
RegisterID reg = frame.allocReg();
|
||||
masm.move(ImmPtr(obj), reg);
|
||||
frame.pushTypedPayload(JSVAL_MASK32_NONFUNOBJ, reg);
|
||||
frame.pushTypedPayload(JSVAL_TAG_NONFUNOBJ, reg);
|
||||
|
||||
/* Get the property. */
|
||||
jsop_getprop(atom);
|
||||
@@ -2124,8 +2121,8 @@ mjit::Compiler::jsop_callprop_obj(JSAtom *atom)
|
||||
PICGenInfo pic(ic::PICInfo::CALL);
|
||||
|
||||
JS_ASSERT(top->isTypeKnown());
|
||||
JS_ASSERT(top->getTypeTag() == JSVAL_MASK32_FUNOBJ ||
|
||||
top->getTypeTag() == JSVAL_MASK32_NONFUNOBJ);
|
||||
JS_ASSERT(top->getTypeTag() == JSVAL_TAG_FUNOBJ ||
|
||||
top->getTypeTag() == JSVAL_TAG_NONFUNOBJ);
|
||||
|
||||
pic.hotPathBegin = masm.label();
|
||||
pic.hasTypeCheck = false;
|
||||
@@ -2188,10 +2185,10 @@ mjit::Compiler::jsop_callprop(JSAtom *atom)
|
||||
|
||||
/* If the incoming type will never PIC, take slow path. */
|
||||
if (top->isTypeKnown() &&
|
||||
(top->getTypeTag() != JSVAL_MASK32_FUNOBJ &&
|
||||
top->getTypeTag() != JSVAL_MASK32_NONFUNOBJ))
|
||||
(top->getTypeTag() != JSVAL_TAG_FUNOBJ &&
|
||||
top->getTypeTag() != JSVAL_TAG_NONFUNOBJ))
|
||||
{
|
||||
if (top->getTypeTag() == JSVAL_MASK32_STRING)
|
||||
if (top->getTypeTag() == JSVAL_TAG_STRING)
|
||||
return jsop_callprop_str(atom);
|
||||
return jsop_callprop_slow(atom);
|
||||
}
|
||||
@@ -2209,8 +2206,8 @@ mjit::Compiler::jsop_setprop(JSAtom *atom)
|
||||
|
||||
/* If the incoming type will never PIC, take slow path. */
|
||||
if (lhs->isTypeKnown() &&
|
||||
(lhs->getTypeTag() != JSVAL_MASK32_FUNOBJ &&
|
||||
lhs->getTypeTag() != JSVAL_MASK32_NONFUNOBJ))
|
||||
(lhs->getTypeTag() != JSVAL_TAG_FUNOBJ &&
|
||||
lhs->getTypeTag() != JSVAL_TAG_NONFUNOBJ))
|
||||
{
|
||||
jsop_setprop_slow(atom);
|
||||
return;
|
||||
@@ -2222,13 +2219,13 @@ mjit::Compiler::jsop_setprop(JSAtom *atom)
|
||||
/* Guard that the type is an object. */
|
||||
Jump typeCheck;
|
||||
if (!lhs->isTypeKnown()) {
|
||||
JS_STATIC_ASSERT(JSVAL_MASK32_NONFUNOBJ < JSVAL_MASK32_FUNOBJ);
|
||||
JS_STATIC_ASSERT(JSVAL_TAG_NONFUNOBJ < JSVAL_TAG_FUNOBJ);
|
||||
RegisterID reg = frame.tempRegForType(lhs);
|
||||
pic.typeReg = reg;
|
||||
|
||||
/* Start the hot path where it's easy to patch it. */
|
||||
pic.hotPathBegin = masm.label();
|
||||
Jump j = masm.branch32(Assembler::Below, reg, Imm32(JSVAL_MASK32_NONFUNOBJ));
|
||||
Jump j = masm.branch32(Assembler::Below, reg, ImmTag(JSVAL_TAG_NONFUNOBJ));
|
||||
|
||||
pic.typeCheck = stubcc.masm.label();
|
||||
stubcc.linkExit(j);
|
||||
@@ -2256,7 +2253,7 @@ mjit::Compiler::jsop_setprop(JSAtom *atom)
|
||||
vr.isConstant = false;
|
||||
vr.u.s.isTypeKnown = rhs->isTypeKnown();
|
||||
if (vr.u.s.isTypeKnown) {
|
||||
vr.u.s.type.mask = rhs->getTypeTag();
|
||||
vr.u.s.type.tag = rhs->getTypeTag();
|
||||
} else {
|
||||
vr.u.s.type.reg = frame.tempRegForType(rhs);
|
||||
frame.pinReg(vr.u.s.type.reg);
|
||||
@@ -2302,7 +2299,7 @@ mjit::Compiler::jsop_setprop(JSAtom *atom)
|
||||
masm.storeValue(Valueify(vr.u.v), slot);
|
||||
} else {
|
||||
if (vr.u.s.isTypeKnown)
|
||||
masm.storeTypeTag(ImmTag(vr.u.s.type.mask), slot);
|
||||
masm.storeTypeTag(ImmTag(vr.u.s.type.tag), slot);
|
||||
else
|
||||
masm.storeTypeTag(vr.u.s.type.reg, slot);
|
||||
masm.storeData32(vr.u.s.data, slot);
|
||||
@@ -2498,7 +2495,7 @@ mjit::Compiler::iterNext()
|
||||
/* Test type. */
|
||||
Jump isString = masm.branch32(Assembler::Equal,
|
||||
masm.payloadOf(Address(T2, 0)),
|
||||
Imm32(int32(JSVAL_MASK32_STRING)));
|
||||
Imm32(int32(JSVAL_TAG_STRING)));
|
||||
|
||||
/* Test if for-each. */
|
||||
masm.load32(Address(T1, offsetof(NativeIterator, flags)), T3);
|
||||
@@ -2601,7 +2598,7 @@ mjit::Compiler::jsop_bindgname()
|
||||
prepareStubCall();
|
||||
stubCall(stubs::BindGlobalName, Uses(0), Defs(1));
|
||||
frame.takeReg(Registers::ReturnReg);
|
||||
frame.pushTypedPayload(JSVAL_MASK32_NONFUNOBJ, Registers::ReturnReg);
|
||||
frame.pushTypedPayload(JSVAL_TAG_NONFUNOBJ, Registers::ReturnReg);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -2611,7 +2608,7 @@ mjit::Compiler::jsop_getgname(uint32 index)
|
||||
jsop_bindgname();
|
||||
|
||||
FrameEntry *fe = frame.peek(-1);
|
||||
JS_ASSERT(fe->isTypeKnown() && fe->getTypeTag() == JSVAL_MASK32_NONFUNOBJ);
|
||||
JS_ASSERT(fe->isTypeKnown() && fe->getTypeTag() == JSVAL_TAG_NONFUNOBJ);
|
||||
|
||||
MICGenInfo mic;
|
||||
RegisterID objReg;
|
||||
@@ -2687,7 +2684,7 @@ mjit::Compiler::jsop_setgname(uint32 index)
|
||||
{
|
||||
#if ENABLE_MIC
|
||||
FrameEntry *objFe = frame.peek(-2);
|
||||
JS_ASSERT_IF(objFe->isTypeKnown(), objFe->getTypeTag() == JSVAL_MASK32_NONFUNOBJ);
|
||||
JS_ASSERT_IF(objFe->isTypeKnown(), objFe->getTypeTag() == JSVAL_TAG_NONFUNOBJ);
|
||||
|
||||
MICGenInfo mic;
|
||||
RegisterID objReg;
|
||||
@@ -2731,7 +2728,7 @@ mjit::Compiler::jsop_setgname(uint32 index)
|
||||
Value v;
|
||||
RegisterID typeReg = Registers::ReturnReg;
|
||||
RegisterID dataReg = Registers::ReturnReg;
|
||||
JSValueMask32 typeTag = JSVAL_MASK32_INT32;
|
||||
JSValueTag typeTag = JSVAL_TAG_INT32;
|
||||
|
||||
mic.typeConst = fe->isTypeKnown();
|
||||
mic.dataConst = fe->isConstant();
|
||||
@@ -2816,12 +2813,12 @@ mjit::Compiler::jsop_instanceof()
|
||||
* thus have fun_instanceOf, which we're inlining.
|
||||
*/
|
||||
|
||||
if (rhs->isTypeKnown() && rhs->getTypeTag() != JSVAL_MASK32_FUNOBJ) {
|
||||
if (rhs->isTypeKnown() && rhs->getTypeTag() != JSVAL_TAG_FUNOBJ) {
|
||||
prepareStubCall();
|
||||
stubCall(stubs::InstanceOf, Uses(2), Defs(1));
|
||||
frame.popn(2);
|
||||
frame.takeReg(Registers::ReturnReg);
|
||||
frame.pushTypedPayload(JSVAL_MASK32_BOOLEAN, Registers::ReturnReg);
|
||||
frame.pushTypedPayload(JSVAL_TAG_BOOLEAN, Registers::ReturnReg);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2883,7 +2880,7 @@ mjit::Compiler::jsop_instanceof()
|
||||
stubcc.call(stubs::FastInstanceOf);
|
||||
|
||||
frame.popn(3);
|
||||
frame.pushTypedPayload(JSVAL_MASK32_BOOLEAN, temp);
|
||||
frame.pushTypedPayload(JSVAL_TAG_BOOLEAN, temp);
|
||||
|
||||
firstSlow.linkTo(stubcc.masm.label(), &stubcc.masm);
|
||||
stubcc.rejoin(1);
|
||||
|
||||
Reference in New Issue
Block a user