Я ищу выполнение операции shl(mult(var1,var2),1)
, где mult
умножает var1
и var2
(оба являются 16-битными целыми числами со знаком), а shl
арифметически сдвигает влево результат умножения. Результат должен быть насыщенным, т. е. int32 max или int32 min, если происходит переполнение или потеря значимости, и mult(-32768,-32768)=2147483647
.
Мне нужно сделать эту операцию для нескольких значений эффективным способом, для чего я думаю использовать набор инструкций MMX/SSE. Я думал о создании mult(sign_extesion(var1)
, shl(sign_extension(var2)))
, но только что обнаружил, что версии насыщения MMX mult()
не существует. Вы знаете какой-нибудь другой способ получить его?