Для чего нужны _mm256_testc_pd, _mm256_testz_pd, _mm256_testnzc_pd? - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь понять присущие _mm256_testc_pd, _mm256_testz_pd и _mm256_testnzc_pd, и мне трудно их понять.

Для анализа _mm256_testc_pd я выявил следующие случаи(a является первым, b вторым __mm256d аргументом):

  • Если все упакованные числа в b имеют> 0, то ZF=1, CF=1, за исключением:
  • Если один упакован по два в каждом a и b, то взаимно <0 </em>, тогда ZF=0.
  • Если один упакован вдвое в каждом !a и b равны взаимно <0 </em>, то CF=0.

InДругими словами, значение ZF=1 говорит мне, что либо а) b является полностью положительным, либо б) что для тех двойных чисел в b, которые не являются положительными, есть соответствующий двойник в a, который является отрицательным,Значение CF=1 говорит мне, что либо c) b является полностью положительным, либо d) что для тех двойных чисел в b, которые не являются положительными, есть совпадающее двойное число в !a, которое является отрицательным.

Правильно ли я понял?Я немного смущен этим.Какой смысл этой проверки?Для чего мне использовать эти встроенные функции?

1 Ответ

0 голосов
/ 21 ноября 2018

Самым распространенным вариантом использования является тестирование результата операции сравнения, где элементы результата сравнения - либо все 1, либо все 0 (поэтому достаточно проверить знаковый бит) - это позволяет реализовать предикаты, такие как "все равно "или" больше, чем "и т. д., используя _mm*_testz_p* встроенную функцию.

Я никогда не нашел применения ни для одного из других вариантов.

...