У меня есть программа Windows x64 C++, скомпилированная MSVC 12 без поддержки AVX (без /arch:AVX в параметрах компиляции).
И у меня есть отчет о сбое от одного клиента с Core i7 4700MQ на Win7. Код исключения — c000001d (недопустимая инструкция), а смещение исключения указывает на инструкцию «vmovd r9,xmm0» внутри функции sin(). Я пробовал две разные сборки с этим пользователем, и в обоих случаях он указывает на одну и ту же инструкцию.
Похоже, что встроенная версия sin() библиотеки msvc имеет специальный путь кода AVX, даже если она скомпилирована без поддержки AVX. И этот код отлично работает на старых процессорах i3, у которых нет AVX.
Итак, что может вызвать это исключение на этом конкретном i7? Один и тот же код работает без каких-либо проблем для многих клиентов с широким диапазоном процессоров.
Может быть, AVX можно как-то отключить в настройках ОС/BIOS, и код sin() не может это проверить? Или, может быть, было какое-то обновление ОС, которое добавило поддержку AVX, а без него любой код AVX вызывает c000001d?