本文整理汇总了C++中BitVector::ComplimentAll方法的典型用法代码示例。如果您正苦于以下问题:C++ BitVector::ComplimentAll方法的具体用法?C++ BitVector::ComplimentAll怎么用?C++ BitVector::ComplimentAll使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BitVector
的用法示例。
在下文中一共展示了BitVector::ComplimentAll方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Assert
void
LinearScanMD::LegalizeConstantUse(IR::Instr * instr, IR::Opnd * opnd)
{
Assert(opnd->IsAddrOpnd() || opnd->IsIntConstOpnd());
intptr_t value = opnd->IsAddrOpnd() ? (intptr_t)opnd->AsAddrOpnd()->m_address : opnd->AsIntConstOpnd()->GetValue();
if (value == 0
&& instr->m_opcode == Js::OpCode::MOV
&& !instr->GetDst()->IsRegOpnd()
&& TySize[opnd->GetType()] >= 4)
{
Assert(this->linearScan->instrUseRegs.IsEmpty());
// MOV doesn't have an imm8 encoding for 32-bit/64-bit assignment, so if we have a register available,
// we should hoist it and generate xor reg, reg and MOV dst, reg
BitVector regsBv;
regsBv.Copy(this->linearScan->activeRegs);
regsBv.ComplimentAll();
regsBv.And(this->linearScan->int32Regs);
regsBv.Minus(this->linearScan->tempRegs); // Avoid tempRegs
BVIndex regIndex = regsBv.GetNextBit();
if (regIndex != BVInvalidIndex)
{
instr->HoistSrc1(Js::OpCode::MOV, (RegNum)regIndex);
this->linearScan->instrUseRegs.Set(regIndex);
this->func->m_regsUsed.Set(regIndex);
// If we are in a loop, we need to mark the register being used by the loop so that
// reload to that register will not be hoisted out of the loop
this->linearScan->RecordLoopUse(nullptr, (RegNum)regIndex);
}
}
}