Я ищу выполнение операции 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()
. Вы знаете какой-нибудь другой способ получить его?