int scanByteArray(byte[] byteMap, int BBLastPtr, byte refType, int mapslot, boolean skipOneBit) {
int scanByteArray(byte[] byteMap, int BBLastPtr, byte refType, int mapslot, boolean skipOneBit) throws VM_PragmaInterruptible {
  int scanByteArray(byte[] byteMap, int BBLastPtr, byte refType, int mapslot, boolean skipOneBit) {    skipOneBit = false;    if (BBLastPtr == -1) return -1;     // no map for this jsr    // get a place to hold the map if necessary    if (mapslot == 0)       mapslot  = getNextMapElement();     // get first word of map    // initialize search variables    int len    = (BBLastPtr + 1);      // get length of map    int offset = 0;                    // offset from origin    int word = mapslot;                // first word of map    // map may take multiple words -convert 1 at a time    while (len > 0) {      boolean doSkip = (offset == 0 && skipOneBit);  // skip a bit if first word and skipOneBit is set      int bitsToDo = doSkip ? BITS_PER_MAP_ELEMENT - 1 : BITS_PER_MAP_ELEMENT;      if (len < bitsToDo)                                bitsToDo = len;      byte result = convertMapElement(byteMap, offset, bitsToDo, refType);      if (doSkip)        result = (byte)((0x000000ff & result) >>> 1);   // shift right to skip high bit for jsr to be consistent with normal maps      unusualReferenceMaps[word] = result;      len    -= bitsToDo;                // update remaining words      offset += bitsToDo;                // and offset      word++;                            // get next word    }    return mapslot;  }