Ajustando o gerador XORShift para retornar um número dentro de um máximo

Eu preciso gerar inteiros aleatórios dentro de um máximo. Desde ao desempenho é críticoEu decidi usar um gerador XORShift em vez da classe Random do Java.

long seed = System.nanoTime();
seed ^= (seed << 21);
seed ^= (seed >>> 35);
seed ^= (seed << 4);

Esta implementação(fonte) me dá um inteiro longo, mas o que eu realmente quero é um inteiro entre 0 e um máximo.

public int random(int max){ /*...*/}

Qual é a maneira mais eficiente de implementar esse método?

questionAnswers(2)

yourAnswerToTheQuestion