jsrInfo.unusualReferenceMaps[jsrInfo.mergedReturnAddressMap+i] = (byte)(jsrInfo.unusualReferenceMaps[jsrInfo.mergedReturnAddressMap+i] | jsrInfo.unusualReferenceMaps[returnAddressMapIndex + i]);
  private void finalMergeMaps(int jsrBaseMapIndex, VM_UnusualMaps deltaMap) {    int i;    // clear out merged maps ie the destination maps)    for ( i = 0; i < bytesPerMap(); i++){      jsrInfo.unusualReferenceMaps[jsrInfo.mergedReferenceMap + i] = 0;      jsrInfo.unusualReferenceMaps[jsrInfo.mergedReturnAddressMap + i] = 0;    }    // get the indices of the maps for the unusual map    int refMapIndex           = deltaMap.getReferenceMapIndex();    int nonRefMapIndex        = deltaMap.getNonReferenceMapIndex();    int returnAddressMapIndex = deltaMap.getReturnAddressMapIndex();    // merge the delta map into the jsr map    for ( i = 0; i < bytesPerMap() ; i++) {      // jsrBaseMap use high bit of first byte for jsr bit; shift to compensate      byte base = referenceMaps[jsrBaseMapIndex+i];      byte nextBase = (i + 1 < bytesPerMap()) ? referenceMaps[jsrBaseMapIndex+i+1] : 0;      byte finalBase = (byte) ((base << 1) | ((0xff & nextBase) >>> 7));      byte newRef = jsrInfo.unusualReferenceMaps[refMapIndex+i];      byte newNonRef = jsrInfo.unusualReferenceMaps[nonRefMapIndex + i];      byte res = (byte)((finalBase | newRef) & (~newNonRef));      /* if an entry is also a return address this must dominate: it CANNOT be both */      res &= ~jsrInfo.unusualReferenceMaps[jsrInfo.mergedReturnAddressMap+i];      jsrInfo.unusualReferenceMaps[jsrInfo.mergedReferenceMap+i] = res;      jsrInfo.unusualReferenceMaps[jsrInfo.mergedReturnAddressMap+i]         = (byte)(jsrInfo.unusualReferenceMaps[jsrInfo.mergedReturnAddressMap+i]                  | jsrInfo.unusualReferenceMaps[returnAddressMapIndex + i]);      /*         VM.sysWrite("   **** base = "); VM.sysWrite(base);         VM.sysWrite("     nextBase = "); VM.sysWrite(nextBase);         VM.sysWrite("     newRef = "); VM.sysWrite(newRef);         VM.sysWrite("     newNonRef = "); VM.sysWrite(newNonRef);         VM.sysWrite("     finalBase = "); VM.sysWrite(finalBase);         VM.sysWrite("     res = "); VM.sysWrite(res);         VM.sysWrite("\n");       */    }    if ( VM.TraceStkMaps) {      //Note: this displays each byte as a word ... only look at low order byte      VM.sysWrite("finalmergemaps-jsr total set2ref delta map  = " );      for ( i = 0; i < bytesPerMap() ; i++)        VM.sysWrite( jsrInfo.unusualReferenceMaps[refMapIndex + i]);      VM.sysWrite( "\n");      VM.sysWrite("              -jsr total set2nonref delta map  = " );      for ( i = 0; i < bytesPerMap() ; i++)        VM.sysWrite( jsrInfo.unusualReferenceMaps[nonRefMapIndex + i]);      VM.sysWrite( "\n");      VM.sysWrite("              -jsr base map  = " );      for ( i = 0; i < bytesPerMap() ; i++)        // ORIGINAL VM.sysWrite( jsrInfo.unusualReferenceMaps[jsrBaseMapIndex + i]);        VM.sysWrite( referenceMaps[jsrBaseMapIndex + i]);      VM.sysWrite( "\n");      VM.sysWrite("              -combined merged ref map  = " );      for ( i = 0; i < bytesPerMap() ; i++)        VM.sysWrite( jsrInfo.unusualReferenceMaps[jsrInfo.mergedReferenceMap + i]);      VM.sysWrite( "\n");      VM.sysWrite("              -combined merged return address map  = " );      for ( i = 0; i < bytesPerMap() ; i++)        VM.sysWrite( jsrInfo.unusualReferenceMaps[jsrInfo.mergedReturnAddressMap + i]);      VM.sysWrite( "\n");    }    return;  }