iTable[getITableIndex(I, im.getName(), im.getDescriptor())] = (VM_CodeArray) tib[vm.getOffset()>>LOG_BYTES_IN_ADDRESS];
iTable[getITableIndex(I, im.getName(), im.getDescriptor())] = (VM_CodeArray) tib[vm.getOffsetAsInt()>>LOG_BYTES_IN_ADDRESS];
  private static Object[] buildITable(VM_Class C, VM_Class I) {    VM_Method [] interfaceMethods = I.getDeclaredMethods();    Object[] tib = C.getTypeInformationBlock();    Object[] iTable = new Object[interfaceMethods.length+1];    iTable[0] = I;     for (int i=0; i<interfaceMethods.length; i++) {      VM_Method im = interfaceMethods[i];      if (im.isClassInitializer()) continue;       if (VM.VerifyAssertions) VM._assert(im.isPublic() && im.isAbstract());       VM_Method vm = C.findVirtualMethod(im.getName(), im.getDescriptor());      // NOTE: if there is some error condition, then we are playing a dirty trick and      //       pretending that a static method of VM_Runtime is a virtual method.      //       Since the methods in question take no arguments, we can get away with this.      if (vm == null || vm.isAbstract()) {        vm = VM_Entrypoints.raiseAbstractMethodError;      } else if (!vm.isPublic()) {        vm = VM_Entrypoints.raiseIllegalAccessError;      }      if (vm.isStatic()) {        vm.compile();        iTable[getITableIndex(I, im.getName(), im.getDescriptor())] = vm.getCurrentInstructions();      } else {        iTable[getITableIndex(I, im.getName(), im.getDescriptor())] = (VM_CodeArray) tib[vm.getOffset()>>LOG_BYTES_IN_ADDRESS];      }    }    return iTable;  }