Преобразование, затем смещение, а затем побитовое - или единственный способ конвертировать из двух __m128d
в один __m128i
?Как эффективно конвертировать из двух __m128d в один __m128i в MSVC?
Это вполне приемлемо, чтобы Xcode в x64 построить
m128d v2dHi = ....
m128d v2dLo = ....
__m128i v4i = _mm_set_epi64(_mm_cvtpd_pi32(v2dHi), _mm_cvtpd_pi32(v2dLo))
и разборки показывает _mm_cvtpd_pi32
используется. Однако Visual Studio не может скомпилировать это, жалуясь на ошибку компоновщика. Это поддерживается в документах VS, заявив, что _mm_cvtpd_pi32
не поддерживается на x64.
Я не слишком обеспокоен тем, что он недоступен, но это два преобразования, сдвиг, затем поразрядный или самый быстрый способ?
Xcode не оптимизировал его. Демонтаж показывает, что используется _mm_cvtpd_pi32, а _mm_set_epi64 просто использует mov для хранения значений. –
Да, это работает: _mm_unpacklo_epi64 (_mm_cvtpd_epi32 (v2dLo), _mm_cvtpd_epi32 (v2dHi)) –