Периодически, когда у меня выдаётся несколько свободных минут, но их маловато чтобы сделать что-то полезное, я убиваю время чтением “Intel® 64 and IA-32 Architectures Software Developer’s Manual”. И вот позавчера, во время очередного такого чтения, я наткнулся на описание инструкций SHLD/SHRD. Уж не знаю как я их до этого не замечал, но факт остаётся фактом – в реализации работы с большими числами их сдвиги были реализованы через SHL/SHR. И я это отчётливо помнил.
Естественно прочитав про “новые” инструкции я сразу же нашел часик на исправление текущей реализации. Результаты просто отличные – время выполнения операций сдвига больших чисел сократилось в 1.5(!) раза. Хотя конечно общий прирост производительности RSA невелик, но с другой стороны общий прирост производительности на ~5.5% это тоже не так уж и мало.