code: public long getRegister(final long registerIndex) {
          final long bitIndex = registerIndex * registerWidth;
          final int firstWordIndex = (int)(bitIndex >>> LOG2_BITS_PER_WORD)/*aka (bitIndex / BITS_PER_WORD)*/;
          final int secondWordIndex = (int)((bitIndex + registerWidth - 1) >>> LOG2_BITS_PER_WORD)/*see above*/;
          final int bitRemainder = (int)(bitIndex & BITS_PER_WORD_MASK)/*aka (bitIndex % BITS_PER_WORD)*/;
  
          if(firstWordIndex == secondWordIndex)
              return ((words[firstWordIndex] >>> bitRemainder) & registerMask);
          /* else -- register spans words */
          return (words[firstWordIndex] >>> bitRemainder)/*no need to mask since at top of word*/
               | (words[secondWordIndex] << (BITS_PER_WORD - bitRemainder)) & registerMask;
      }
docs: NOTE:  if this changes then setMaxRegister() must change