У меня есть программа для Windows x64 C++, которая скомпилирована MSVC 12 без поддержки AVX (нет/arch: AVX в вариантах компиляции).Нелегальная инструкция по AVX с Intel Core i7
И у меня есть отчет о сбоях от одного клиента с Core i7 4700MQ на Win7. Код исключения - c000001d (незаконная команда), а смещение исключений указывает на команду «vmovd r9, xmm0» внутри функции sin(). Я пробовал две разные сборки с этим пользователем, и в обоих случаях он указывает на эту же инструкцию.
Похоже, что библиотечная версия библиотеки msvc имеет встроенный код AVX, даже если скомпилирован без поддержки AVX. И этот код отлично работает на более старых процессорах i3, у которых не было AVX.
Итак, что может вызвать это исключение на этом конкретном i7? Такой же код работает без проблем для многих клиентов с широким размахом процессоров.
Возможно, AVX может быть каким-то образом отключен в настройках ОС/BIOS и код sin() не могут это проверить? Или, может быть, было некоторое обновление ОС, которое добавило поддержку AVX, и без него какие-либо триггеры кода AVX c000001d?
Может быть, связанные с: https://connect.microsoft.com/VisualStudio/Feedback/Details/987093, https://connect.microsoft.com/VisualStudio/Feedback/Details/981479 – Mysticial
Но 4700MQ * делает * поддерживает AVX, правильно? – harold
@ Мистическое да, ОС была причиной. Этот пользователь запускал версию Win7 до SP1, а поддержка AVX была добавлена только в SP1. Как-то я думал, что MSVC 12 делает код совместимым с Vista. Но выглядит как min spec - Win7 SP1. –