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


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

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


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

示例1: gen

 void AbstractArrayAtNode::gen() {
   BasicNode::gen();
   Label* argFail = NULL;          // if arg isn't a smi
   Label* indexFail = NULL;        // if arg is out of bounds
   Assembler* a = theAssembler;
   Location arr = genHelper->moveToReg(_src, Temp2);
   Location index = genHelper->moveToReg(arg, Temp1);
   Location size = Temp3;
   // load array size now (avoids load interlock for range check)
   a->LoadI(arr, sizeOffset, size);  
   if (!intArg) {
     // CP may have propagated a constant into arg
     intArg = arg->isConstPReg() && ((ConstPReg*)arg)->constant->is_smi();
   }
   if (!intArg) {
     // test arg for smiOop
     if (SICCountTypeTests) {
       a->startTypeTest(1, false, true);
       a->doOneTypeTest();
     }
     if (SICCountIntTagTests) a->markTagTest(1);
     a->AndCCI(index, Tag_Mask, G0);
     argFail = argFail->unify(a->BneForward(false));
     if (SICCountTypeTests) a->endTypeTest();
   }
   argFail = argFail->unify(testArg2());
   a->SubCCR(index, size, G0);
   indexFail = a->BgeuForward(false);
   Location res = isRegister(_dest->loc) ? _dest->loc : Temp1;
   bool needDestStore = genAccess(arr, index, res);
   if (needDestStore && !isRegister(_dest->loc)) {
     genHelper->moveRegToLoc(res, _dest->loc);
   }
   Label* done = a->BraForward(true);
   MergeNode* failMerge = (MergeNode*)next1();
   if (argFail) {
     argFail->define();
     if (error) {
       Location err = isRegister(error->loc) ? error->loc : Temp1;
       genHelper->loadImmediateOop(VMString[BADTYPEERROR], err);
       if (err != error->loc) genHelper->moveRegToLoc(err, error->loc);
     }
     if (failMerge) // test added by dmu 4/27/96
       failMerge->l = failMerge->l->unify(a->BraForward(true));
   }
   indexFail->define();
   if (error) {
     Location err = isRegister(error->loc) ? error->loc : Temp1;
     genHelper->loadImmediateOop(VMString[BADINDEXERROR], err);
     if (err != error->loc) genHelper->moveRegToLoc(err, error->loc);
   }
   if (failMerge) // test added by dmu 4/27/96
     failMerge->l = failMerge->l->unify(a->BraForward(true));
   done->define();
 }
开发者ID:ardeujho,项目名称:self,代码行数:55,代码来源:node_sparc.cpp


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