本文整理汇总了C++中LUnbox::setOperand方法的典型用法代码示例。如果您正苦于以下问题:C++ LUnbox::setOperand方法的具体用法?C++ LUnbox::setOperand怎么用?C++ LUnbox::setOperand使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类LUnbox
的用法示例。
在下文中一共展示了LUnbox::setOperand方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ensureDefined
void
LIRGeneratorARM::visitUnbox(MUnbox *unbox)
{
// An unbox on arm reads in a type tag (either in memory or a register) and
// a payload. Unlike most instructions conusming a box, we ask for the type
// second, so that the result can re-use the first input.
MDefinition *inner = unbox->getOperand(0);
MOZ_ASSERT(inner->type() == MIRType_Value);
ensureDefined(inner);
if (IsFloatingPointType(unbox->type())) {
LUnboxFloatingPoint *lir = new(alloc()) LUnboxFloatingPoint(unbox->type());
if (unbox->fallible())
assignSnapshot(lir, unbox->bailoutKind());
useBox(lir, LUnboxFloatingPoint::Input, inner);
define(lir, unbox);
return;
}
// Swap the order we use the box pieces so we can re-use the payload register.
LUnbox *lir = new(alloc()) LUnbox;
lir->setOperand(0, usePayloadInRegisterAtStart(inner));
lir->setOperand(1, useType(inner, LUse::REGISTER));
if (unbox->fallible())
assignSnapshot(lir, unbox->bailoutKind());
// Types and payloads form two separate intervals. If the type becomes dead
// before the payload, it could be used as a Value without the type being
// recoverable. Unbox's purpose is to eagerly kill the definition of a type
// tag, so keeping both alive (for the purpose of gcmaps) is unappealing.
// Instead, we create a new virtual register.
defineReuseInput(lir, unbox, 0);
}
示例2: define
bool
LIRGeneratorARM::visitUnbox(MUnbox *unbox)
{
// An unbox on arm reads in a type tag (either in memory or a register) and
// a payload. Unlike most instructions conusming a box, we ask for the type
// second, so that the result can re-use the first input.
MDefinition *inner = unbox->getOperand(0);
if (!ensureDefined(inner))
return false;
if (unbox->type() == MIRType_Double) {
LUnboxDouble *lir = new LUnboxDouble();
if (unbox->fallible() && !assignSnapshot(lir, unbox->bailoutKind()))
return false;
if (!useBox(lir, LUnboxDouble::Input, inner))
return false;
return define(lir, unbox);
}
// Swap the order we use the box pieces so we can re-use the payload register.
LUnbox *lir = new LUnbox;
lir->setOperand(0, usePayloadInRegisterAtStart(inner));
lir->setOperand(1, useType(inner, LUse::REGISTER));
if (unbox->fallible() && !assignSnapshot(lir, unbox->bailoutKind()))
return false;
// Note that PASSTHROUGH here is illegal, since types and payloads form two
// separate intervals. If the type becomes dead before the payload, it
// could be used as a Value without the type being recoverable. Unbox's
// purpose is to eagerly kill the definition of a type tag, so keeping both
// alive (for the purpose of gcmaps) is unappealing. Instead, we create a
// new virtual register.
return defineReuseInput(lir, unbox, 0);
}