本文整理汇总了C++中Assembler::SubCCI方法的典型用法代码示例。如果您正苦于以下问题:C++ Assembler::SubCCI方法的具体用法?C++ Assembler::SubCCI怎么用?C++ Assembler::SubCCI使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Assembler
的用法示例。
在下文中一共展示了Assembler::SubCCI方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: checkRecompilation
void SICGenHelper::checkRecompilation(fint countID) {
// test for recompilation
// sethi &counter, t3
// load [t3 + lo%(&counter)], t4
// add t4, 1, t4
// cmp t4, recompileLimit
// bne ok
// store t4, [t3 + lo%(&counter)]
// <jumpTo recompiler>
// nop
// ok:
// di recompilation doesn't work right now - see recompile.c
if (theSIC->diLink) return;
Assembler* ass = theAssembler;
ass->Comment("test for recompilation");
void* counter = &useCount[countID];
ass->SetHiA(counter, Temp3);
ass->LoadA(Temp3, counter, Temp2);
ass->AddI(Temp2, 1, Temp2);
fint limit = recompileLimit(0);
if (limit < maxImmediate) {
ass->SubCCI(Temp2, limit, G0);
} else {
ass->SetHiI2(limit, Temp1); // limit is multiple of 1024
ass->SubCCR(Temp2, Temp1, G0);
}
Label* ok = ass->BneForward(false);
// call recompiler
void* fnaddr = first_inst_addr(
theSIC->diLink ? Memory->zone->DIRecompile_stub_td()
: Memory->zone-> Recompile_stub_td() );
Location linkReg = theSIC->diLink ? DIRecompileLinkReg : RecompileLinkReg;
jumpTo(fnaddr, linkReg, linkReg);
// The store below is always executed so that we will call the recompiler
// exactly once (even if it cannot recompile for some reason).
ok->define();
assert(Temp3 != linkReg, "counter addr reg will be trashed by jump");
ass->StoreA(Temp3, counter, Temp2);
}