我有一個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