[JAEGER] Update JM2 for fatval merge.

This commit is contained in:
David Anderson
2010-06-24 14:17:08 -07:00
parent e098784480
commit 57ec315266
11 changed files with 221 additions and 229 deletions

View File

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