Собственно, вопрос первый. Как реализовать загрузку двух 2D float векторов в верхнее и нижнее qword регистра xmm? На голом асме эта задача тривиальна, но ккак быть с интрисками? Для перемещения floats есть следующие Код (Text): _mm_load_ss _mm_load1_ps, _mm_load_ps1 _mm_load_ps _mm_loadu_ps _mm_loadr_ps Но, как видите, они копируют либо один float, либо сразу четыре. Есть ли аналоги инструкций movlps и movhps для float среди интрсиков? Перерыл весь справочник в MSDN и ни одной не нашел И вопрос второй. В той же MSDN некоторое замечание, касающееся применения типа __m64. Но среди интрисков SSE2 этот тип применяется. Правильно ли я понимаю, что тип __m64 будет правильно скомпилирован в работоспособный под x64 код применительно к SSE2, а замечание касается лишь снятия с поддержки MMX под x64?
Оно? - http://msdn.microsoft.com/en-us/library/dzs626wx%28v=vs.71%29.aspx Полагаю, что да. Вообще смысла в использовании mmx на x64 не наблюдается.
Хм, не прав - "Any SSE2 intrinsics that use the __m64 data type are not supported on x64 processors." http://msdn.microsoft.com/ru-ru/library/bytwczae.aspx
Код (Text): __m128 _mm_loadh_pi( __m128 a , __m64 * p ); Да, похоже что оно, вот только меня смущает наличие типа __m64. Это будет работать под x64? Судя по замечанию Boosterа это не будет работать. И не наплодит ли компилятор лишних инструкций, если я буду писать: Код (Text): float vec2[2]; // .. __m128 v1 = _mm_loadh_pi(v1, reinterpret_cast<__m64*>(vec2)); Да еще и варнинги будет выдавать по поводу не инициализированного v1