Код собирается с target AVX2, при разборе "хвоста" решил использовать __m64, в результате после использования _mm_cmpeq_pi8
переменная типа double
приобретает значение nan
, упрощённый пример кода:
__attribute__((target("avx2"),stdcall))
void test(std::vector<uint8_t> & v1, std::vector<uint8_t> & v2)
{
double cmp = 0.0;
// ...
__m64 a1 = _mm_set_pi8(v1[i], v1[i + 1], v1[i + 2], v1[i + 3], ...);
__m64 a2 = _mm_set_pi8(v2[i], v2[i + 1], v2[i + 2], v2[i + 3], ...);
__m64 a3 = _mm_cmpeq_pi8(a1, a2);
// после вызова _mm_cmpeq_pi8, cmp == nan
uint32_t x = static_cast<uint32_t>(_mm_movemask_pi8(a3));
cmp += ((x == 0xffffffffU) ? 0.1 : 0.0);
}
MMX инструкции не совместимы с AVX2? Вроде про это явно нигде не написано. Вопрос в том как это можно пофиксить, кроме как отказавшись от использования __m64.
эксперименты проводились на камне CoffeeLake
При переходе от MMX к floating point необходимо выполнить команду EMMS
, или _mm_empty()
intrinsic.
https://www.felixcloutier.com/x86/emms
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Не могу найти нормальных примеров использование using наименование =
Есть у меня следующий код, который должен плавно скролить страницу вниз до опреденного элементаНо не могу понять, почему он не работает, где...