我有一个Windows x64 C++程序,由MSVC 12编译而没有AVX支持(no/arch:AVX in compile options)。AVX上的非法指令与Intel Core i7
我在Win7上有一个Core i7 4700MQ客户的崩溃报告。异常代码是c000001d(非法指令),异常偏移指向sin()函数内的“vmovd r9,xmm0”指令。我已经与这个用户尝试了两种不同的构建,并且在这两种情况下都指向了这个相同的指令。
看起来像sin()的msvc库版本内在特殊的AVX代码路径即使编译没有AVX支持。此代码在没有AVX的旧版i3处理器上运行良好。
那么,在这个特定的i7上可能会导致这种异常?对于广泛使用CPU的许多客户来说,相同的代码运行没有任何问题。
也许AVX可能在操作系统设置/ BIOS中以某种方式被禁用,并且sin()代码无法检查?或者,也许有些操作系统更新增加了AVX支持,没有任何AVX代码触发器c000001d?
也许相关:https://connect.microsoft.com/VisualStudio/Feedback/Details/987093,https://connect.microsoft.com/VisualStudio/Feedback/Details/981479 – Mysticial 2014-10-09 17:58:43
但4700MQ * *支持AVX,对吗? – harold 2014-10-09 17:59:03
@Mysticial是的,操作系统是一个原因。此用户在SP1之前运行Win7版本,并且仅在SP1中添加了AVX支持。不知何故,我认为MSVC 12使代码兼容到Vista。但看起来像min spec是Win7 SP1。 – 2014-10-10 07:01:54