Я рассматриваю реализацию SHA3 в чистой сборке.SHA3 имеет внутреннее состояние 17 64-битных целых чисел без знака, но из-за преобразований, которые он использует, наилучший случай мог бы быть достигнут, если бы у меня было 44 таких целых числа, доступных в регистрах.Плюс один скретч-регистр возможно.В таком случае я мог бы выполнить полное преобразование в регистрах.
Но это нереально, и оптимизация возможна вплоть до нескольких регистров.Тем не менее, чем больше, тем лучше, в зависимости от ответа на этот вопрос.
Я думаю об использовании регистров MMX по крайней мере для быстрого хранения, даже если мне нужно будет переключиться на другие регистры для вычислений.Но я обеспокоен тем, что это древняя архитектура.
Будет ли передача данных между регистром MMX и, скажем, RAX быстрее, чем индексирование u64 в стеке и доступ к ним из того, что, вероятно, будет кешем L1?Или даже если так, есть ли скрытые подводные камни, помимо соображений скорости, за которыми я должен следить?Меня интересует общий случай, поэтому, даже если один из них был быстрее, чем другой на моем компьютере, он все равно может быть неубедительным.