Получение старшей части 64-битного целочисленного умножения

В C ++ скажем, что:

uint64_t i;
uint64_t j;

затемi * j дастuint64_t что имеет значение как нижнюю часть умножения междуi а такжеjто есть(i * j) mod 2^64, Теперь, что если бы я хотел высшую часть умножения? Я знаю, что существует инструкция по сборке, которая делает что-то подобное при использовании 32-битных целых чисел, но я совсем не знаком со сборкой, поэтому я надеялся на помощь.

Какой самый эффективный способ сделать что-то вроде:

uint64_t k = mulhi(i, j);

Ответы на вопрос(4)

Ваш ответ на вопрос