Сравнивая вектор xmmX
Допустим, вы загрузили вектор xmm1 с четырьмя плавающими точками одинарной точности {1.5, 1.5, 1.5, 1.5} и xmm2 с одинаковыми точками, поэтому xmm1 == xmm2. Теперь вы хотите сравнить их, так что вы пишете в сборке:
movaps %xmm1, %xmm2
cmpeqps %xmm0, %xmm2
Поскольку cmpeqps не устанавливает флаги, как можно сказать:
jne somewhere
Действительно ли нужно использовать ucomiss для сравнения правой части вектора, затем сдвинуть вправо и повторить еще 3 раза?
Спасибо
2 ответа
Ты можешь использовать cmpeqps
Вам просто нужно извлечь четыре флага. Например (не проверено)
cmpeqps xmm2, xmm1
movmskps eax, xmm2
cmp eax, 15
je somewhere
Алгоритмы для Векторизованной арифметики должны быть разработаны, чтобы избежать условных ветвей. Вместо этого каждая полоса выполняет одни и те же инструкции. Условия обычно выполняются путем оценки всех возможных результатов и выбора правильных с помощью масок.