Существует нулевая разница. _mm_set1_ps
является идиоматическим c, используйте его.
например, xmmintrin.h из clang определяет set_ps1
в терминах set1_ps
:
static __inline__ __m128 __DEFAULT_FN_ATTRS
_mm_set_ps1(float __w)
{
return _mm_set1_ps(__w);
}
История догадка
Я предполагаю, что Intel просто не остановилась на схеме именования еще в первые дни SSE1 и переключилась на тип _mm_set1_
в будущем. Но если они уже зарегистрировали _mm_set_ps1
, они не смогли бы его вернуть.
Обратите внимание, что нет _mm_set_epi321
или _mm_set_ep81
(к счастью)! Таким образом, _mm_set1_ps
является идиоматическим c и следует той же схеме, что и другие встроенные трансляции, в то время как _mm_set_ps1
является необычным и удивит читателей. Хотя есть _mm_set_pd1
и _mm_load_pd1
, и, предположительно, они были введены одновременно (с SSE2).
Я знаю об этом только потому, что наткнулся на него на днях, когда искал внутреннюю информацию. c, который будет выполнять вещательную загрузку со строгим псевдонимом, как вы могли бы с vpbroadcastd
в asm. (Не существует портативного, который бы эффективно компилировал всюду; поддержка встроенных функций компилятором представляет собой смешанную пессимизацию мозговых мертвецов и отсутствие встроенных функций, когда вы пытаетесь сделать что-то сложное. Может быть, через несколько лет _mm_loadu_si32(void*)
до нуля расширится как минимум быть широко поддерживаемым ..) / end off topi c rant.