本文整理汇总了C++中Opnd::getValue方法的典型用法代码示例。如果您正苦于以下问题:C++ Opnd::getValue方法的具体用法?C++ Opnd::getValue怎么用?C++ Opnd::getValue使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Opnd
的用法示例。
在下文中一共展示了Opnd::getValue方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: saveRestorePreservedBr
void PrologEpilogGenerator::saveRestorePreservedBr() {
RegBitSet regMask = usedBrMask & opndManager->preservBrMask;
if(regMask.any() == false) return;
IPF_LOG << " Preserved brs:";
for(uint16 i=1; i<6; i++) {
if(regMask[i] == false) continue;
Opnd *storage = newStorage(DATA_B, SITE_STACK);
Opnd *offset = opndManager->newImm(storage->getValue());
Opnd *scratch = opndManager->newRegOpnd(OPND_G_REG, DATA_B, SPILL_REG2);
Opnd *preserv = opndManager->newRegOpnd(OPND_B_REG, DATA_B, i);
saveBrsInsts.push_back(new(mm) Inst(mm, INST_MOV, p0, scratch, preserv));
saveBrsInsts.push_back(new(mm) Inst(mm, INST_ADDS, p0, stackAddr, offset, sp));
saveBrsInsts.push_back(new(mm) Inst(mm, INST_ST, CMPLT_SZ_8, p0, stackAddr, scratch));
restBrsInsts.push_back(new(mm) Inst(mm, INST_ADDS, p0, stackAddr, offset, sp));
restBrsInsts.push_back(new(mm) Inst(mm, INST_LD, CMPLT_SZ_8, p0, scratch, stackAddr));
restBrsInsts.push_back(new(mm) Inst(mm, INST_MOV, p0, preserv, scratch));
IPF_LOG << " " << IrPrinter::toString(preserv);
}
IPF_LOG << endl;
opndManager->savedBrMask = regMask.to_ulong();
}
示例2: saveRestorePreservedGr
void PrologEpilogGenerator::saveRestorePreservedGr() {
opndManager->initSavedBase(); // after this point mem local stack must contain preserved regs only
IPF_LOG << " Preserved register saved in memory stack with offset: " << opndManager->savedBase << endl;
RegBitSet preservGrMask(string("11110000")); // work with r4-r7 only (not with automatic regs r32-r127)
RegBitSet regMask = usedGrMask & preservGrMask;
if(regMask.any() == false) return;
IPF_LOG << " Preserved grs:";
for(uint16 i=4; i<8; i++) {
if(regMask[i] == false) continue;
Opnd *storage = newStorage(DATA_U64, SITE_STACK);
Opnd *offset = opndManager->newImm(storage->getValue());
Opnd *preserv = opndManager->newRegOpnd(OPND_G_REG, DATA_U64, i);
saveGrsInsts.push_back(new(mm) Inst(mm, INST_ADDS, p0, stackAddr, offset, sp));
saveGrsInsts.push_back(new(mm) Inst(mm, INST_ST8_SPILL, p0, stackAddr, preserv));
restGrsInsts.push_back(new(mm) Inst(mm, INST_ADDS, p0, stackAddr, offset, sp));
restGrsInsts.push_back(new(mm) Inst(mm, INST_LD8_FILL, p0, preserv, stackAddr));
IPF_LOG << " " << IrPrinter::toString(preserv);
}
IPF_LOG << endl;
opndManager->savedGrMask = regMask.to_ulong();
}
示例3: isImm
bool Opnd::isImm(int size) {
if (isImm() == false) return false;
Opnd* imm = (Opnd*) this;
if (Opnd::isFoldableImm(imm->getValue(), size)) return true;
return false;
}
示例4: saveRestorePreservedFr
void PrologEpilogGenerator::saveRestorePreservedFr() {
RegBitSet regMask = usedFrMask & opndManager->preservFrMask;
if(regMask.any() == false) return;
IPF_LOG << " Preserved frs:";
for(uint16 i=2; i<32; i++) {
if(regMask[i] == false) continue;
Opnd *storage = newStorage(DATA_F, SITE_STACK);
Opnd *offset = opndManager->newImm(storage->getValue());
Opnd *preserv = opndManager->newRegOpnd(OPND_F_REG, DATA_F, i);
saveFrsInsts.push_back(new(mm) Inst(mm, INST_ADDS, p0, stackAddr, offset, sp));
saveFrsInsts.push_back(new(mm) Inst(mm, INST_STF_SPILL, p0, stackAddr, preserv));
restFrsInsts.push_back(new(mm) Inst(mm, INST_ADDS, p0, stackAddr, offset, sp));
restFrsInsts.push_back(new(mm) Inst(mm, INST_LDF_FILL, p0, preserv, stackAddr));
IPF_LOG << " " << IrPrinter::toString(preserv);
}
IPF_LOG << endl;
opndManager->savedFrMask = regMask.to_ulong();
}