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


Java RegisterSpec.isCategory2方法代码示例

本文整理汇总了Java中com.android.dx.rop.code.RegisterSpec.isCategory2方法的典型用法代码示例。如果您正苦于以下问题:Java RegisterSpec.isCategory2方法的具体用法?Java RegisterSpec.isCategory2怎么用?Java RegisterSpec.isCategory2使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在com.android.dx.rop.code.RegisterSpec的用法示例。


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

示例1: align64bits

import com.android.dx.rop.code.RegisterSpec; //导入方法依赖的package包/类
private void align64bits(Dop[] opcodes) {
  while (true) {
    int notAligned64bitRegAccess = 0;
    int aligned64bitRegAccess = 0;
    int notAligned64bitParamAccess = 0;
    int aligned64bitParamAccess = 0;
    int lastParameter = unreservedRegCount + reservedCount + reservedParameterCount;
    int firstParameter = lastParameter - paramSize;

    // Collects the number of time that 64-bit registers are accessed aligned or not.
    for (DalvInsn insn : insns) {
      RegisterSpecList regs = insn.getRegisters();
      for (int usedRegIdx = 0; usedRegIdx < regs.size(); usedRegIdx++) {
        RegisterSpec reg = regs.get(usedRegIdx);
        if (reg.isCategory2()) {
          boolean isParameter = reg.getReg() >= firstParameter;
          if (reg.isEvenRegister()) {
            if (isParameter) {
              aligned64bitParamAccess++;
            } else {
              aligned64bitRegAccess++;
            }
          } else {
            if (isParameter) {
              notAligned64bitParamAccess++;
            } else {
              notAligned64bitRegAccess++;
            }
          }
        }
      }
    }

    if (notAligned64bitParamAccess > aligned64bitParamAccess
        && notAligned64bitRegAccess > aligned64bitRegAccess) {
      addReservedRegisters(1);
    } else if (notAligned64bitParamAccess > aligned64bitParamAccess) {
      addReservedParameters(1);
    } else if (notAligned64bitRegAccess > aligned64bitRegAccess) {
      addReservedRegisters(1);

      // Need to shift parameters if they exist and if number of unaligned is greater than
      // aligned. We test the opposite because we previously shift all registers by one,
      // so the number of aligned become the number of unaligned.
      if (paramSize != 0 && aligned64bitParamAccess > notAligned64bitParamAccess) {
        addReservedParameters(1);
      }
    } else {
      break;
    }

    if (!reserveRegisters(opcodes)) {
      break;
    }
  }
}
 
开发者ID:JLLK,项目名称:multidex-maker,代码行数:57,代码来源:OutputFinisher.java


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