Я обнаружил ошибку в моей программе, вызванную неправильно используемой инструкцией SSE '_mm_extract_epi16', как показано ниже:
#include <smmintrin.h>
#include <iostream>
int main(int argc, const char * argv[]) {
int16_t test_input[8] = {-1, 2, -3, -4, -5, -6, -7, -8};
__m128i v_input = _mm_load_si128((__m128i *)test_input);
int32_t extract = (int32_t)(_mm_extract_epi16(v_input, 1));
return 0;
}
Если извлеченное значение является положительным, то я получаю правильное значение 2. И наоборотполучить неправильное значение «65533».Или я могу использовать приведенный ниже код, чтобы получить правильное значение.
#include <smmintrin.h>
#include <iostream>
int main(int argc, const char * argv[]) {
int16_t test_input[8] = {-1, 2, -3, -4, -5, -6, -7, -8};
__m128i v_input = _mm_load_si128((__m128i *)test_input);
int16_t extract = (_mm_extract_epi16(v_input, 1));
int32_t result = extract;
return 0;
}
Я не знаю, почему это происходит.