Разница в 17% у двух последних функций может показаться довольно странной, ведь основной цикл у них совпадает.
Предположил, что дело в выравнивании кода (в первом случае выравнивание метки @bodyloop 06, во втором - 0E).
Чтобы поменять смещения в процедуру ShaNormalRefreshCRC64 перед меткой вставил 8-байтовую последовательность
movzx edi, al
mov edi, 0
Предположение подтвердилось, результат изменился на противоположный:
Тест на AMD-K6-III@500MHz
Разница в 17% у двух последних функций может показаться довольно странной, ведь основной цикл у них совпадает.
Предположил, что дело в выравнивании кода (в первом случае выравнивание метки @bodyloop 06, во втором - 0E).
Чтобы поменять смещения в процедуру ShaNormalRefreshCRC64 перед меткой вставил 8-байтовую последовательность
Предположение подтвердилось, результат изменился на противоположный:
Итого имеем ускорение 2.1-2.5 раза.