Найдите minsd, maxsd и cvtsd2si, или, если вы хотите сделать 2 параллельно, используйте minpd, maxpd и cvtpd2dq.
Единственный реальный бонус использования первого метода - это сохранение веток.Сгенерированный код SSE2 будет почти в два раза быстрее с использованием кода, скомпилированного в SSE2, в любом случае ... Настоящая победа заключается в том, что вы выполняете 2 из них одновременно.
Редактировать: Если вы хотите это сделатьиспользуя встроенные функции Visual Studio, я считаю, что код будет выглядеть следующим образом:
__m128d sseDbl = _mm_set_sd( dbl );
sseDbl = _mm_min_sd( dbl, _mm_set_sd( 32767.0 ) );
sseDbl = _mm_max_sd( dbl, _mm_set_sd( -32768.0 ) );
short shrtVal = (short)_mm_cvtsd_si32( sseDbl );
И работа выполнена.Выполнение этого с использованием ассемблера также очень похоже, но приведенное выше определенно даст вам лучшую производительность с Visual Studio.