В настоящее время я работаю над обновлением большой базы кода с VS2013 до VS2019. Одна из ошибок компилятора, с которой я столкнулся, выглядит следующим образом:
intrinsics.h (348): ошибка C3861: '_mm_cvtpd_pi32': идентификатор не найден
Эта внутренняя функция определена в файле "emmintrin.h" Visual Studio. Я получаю эту ошибку только при нацеливании на 64-битные сборки. При ближайшем рассмотрении можно увидеть, что между 2013 и 2019 годами определение emmintrin.h изменилось с этого:
extern __m64 _mm_cvtpd_pi32(__m128d _A);
extern __m64 _mm_cvttpd_pi32(__m128d _A);
extern __m128d _mm_cvtpi32_pd(__m64 _A);
К этому:
#if defined(_M_IX86)
extern __m64 _mm_cvtpd_pi32(__m128d _A);
extern __m64 _mm_cvttpd_pi32(__m128d _A);
extern __m128d _mm_cvtpi32_pd(__m64 _A);
#endif
т.е.: директива препроцессора гарантирует, что функции теперь доступны только для 32-битных целей. Заголовочный файл третьей стороны, из которого возникла ошибка, использует эти функции независимо от цели (64 или 32 бит). По-видимому, лучший способ действий здесь - отредактировать этот файл заголовка, чтобы гарантировать, что эта функция вызывается только для 32-битных целей. Однако меня больше интересует, почему это было изменено с 2013 на 2019 год? Я вижу здесь описание этой функции:
https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtpd_pi32&expand=1705
Разве это никогда не было применимо к 64-битным целям? Или его заменили на 64-битную версию, которую мне нужно рассмотреть?
kernel_fpu_begin
, поэтому ядру не нужно сохранять / восстанавливать состояние FPU / SIMD для обработчиков прерываний / системных вызовов.) Но именно по этим причинам (ядра стараются сохранять / восстанавливать пользовательское пространство i > Состояние FPU / SIMD, включая x87), машинный код пользовательского пространства может ожидать, что он по-прежнему сможет использовать MMX / x87, как текущую Windows. - person Peter Cordes   schedule 31.03.2020long double
= 80-битный x87. Некоторые популярные проекты, такие как x264 и FFmpeg, все еще (к сожалению) используют MMX в рукописном asm. - person Peter Cordes   schedule 31.03.2020