当前位置: 首页>>代码示例>>C++>>正文


C++ Assembler::SetHiA方法代码示例

本文整理汇总了C++中Assembler::SetHiA方法的典型用法代码示例。如果您正苦于以下问题:C++ Assembler::SetHiA方法的具体用法?C++ Assembler::SetHiA怎么用?C++ Assembler::SetHiA使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Assembler的用法示例。


在下文中一共展示了Assembler::SetHiA方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: initCounting

void CountCodePattern::initCounting() {
    // general count stub; 7 instrs = 12 cycles on SS-2.  Could be reduced to
    // 6 insts / 10 cy if one additional register were available (e.g. could
    // use %o5 for sends with < 5 args).
    // 0: sethi count_addr, Temp1
    // 1: ld    [Temp1+lo(count_addr)], Temp2
    // 2: inc   Temp2
    // 3: st    Temp2, [Temp1+lo(count_addr)]
    // 4: sethi jump_addr, Temp1
    // 5: jmpl   Temp1 + low(jump_addr), g0
    // 6: nop
    instsSize = 7 * 4;
    countAddr_offset = 0;
    ld_offset = 1;
    st_offset = 3;
    nm_sethi_offset = 4;
    nm_jmp_offset = 5;
    limit_sethi_offset = countAddr_offset2 = recompile_offset = BadOffset;

    Assembler* a = new Assembler(instsSize, instsSize, false, true);
    a->SetHiA(0, Temp1);
    a->LoadI(Temp1, 0, Temp2);
    a->AddI(Temp2, 1, Temp2);
    a->StoreI(Temp1, 0, Temp2);
    a->SetHiX(0, CodeAddressOperand, Temp1);
    a->JmpLC(Temp1, 0, G0);
    a->Nop();

    pattern = (pc_t)AllocateHeap(instsSize, "countStub pattern");
    copy_words((int32*)a->instsStart, (int32*)pattern, instsSize / 4);
    a->finalize();
}
开发者ID:doublec,项目名称:self,代码行数:32,代码来源:countPattern_sparc.cpp

示例2: initComparing

void CountCodePattern::initComparing() {
    instsSize = 13 * 4;
    // 0: sethi count_addr, Temp1
    // 1: ld    [Temp1+lo(count_addr)], Temp2
    // 2: setHi limit, Temp1
    // 3: inc   Temp2
    // 4: cmp   Temp2, Temp1
    // 5: sethi count_addr, Temp1
    // 6: st    Temp2, [Temp1+lo(count_addr)]
    // 7: beq   10
    // 8: sethi jump_addr, Temp1
    // 9: jmpl   Temp1 + low(jump_addr), g0
    //10: sethi recompile_addr, Temp2
    //11: jmpl   Temp2 + low(recompile_addr), linkReg
    //12: nop
    countAddr_offset = 0;
    countAddr_offset2 = 5;
    ld_offset = 1;
    st_offset = 6;
    nm_sethi_offset = 8;
    nm_jmp_offset = 9;
    limit_sethi_offset = 2;
    recompile_offset = 10;

    Assembler* a = new Assembler(instsSize, instsSize, false, true);
    a->SetHiA(0, Temp1);
    a->LoadI(Temp1, 0, Temp2);
    a->SetHiA(0, Temp1);
    a->AddI(Temp2, 1, Temp2);
    a->SubCCR(Temp2, Temp1, G0);
    a->SetHiA(0, Temp1);
    a->StoreI(Temp1, 0, Temp2);
    Label* l = a->BgeForward(false);
    a->SetHiX(0, CodeAddressOperand, Temp1);
    a->JmpLC(Temp1, 0, G0);
    l->define();
    a->SetHiP(Memory->code->trapdoors->Recompile_stub_td(), Temp2);
    a->JmpLP(Temp2, Memory->code->trapdoors->Recompile_stub_td(), RecompileLinkReg);
    a->Nop();
    pattern = (pc_t)AllocateHeap(instsSize, "countStub pattern");
    copy_words((int32*)a->instsStart, (int32*)pattern, instsSize / 4);
    a->finalize();
}
开发者ID:doublec,项目名称:self,代码行数:43,代码来源:countPattern_sparc.cpp

示例3: 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);
  }
开发者ID:AaronNGray,项目名称:self,代码行数:41,代码来源:genHelper_sparc.cpp


注:本文中的Assembler::SetHiA方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。