![](/img/trans.png)
[英]Unable to activate the SSE instruction set by “-march=native” in gcc or any other flags in Core2 chip
[英]Can there be conflict between `-march` and instruction set switches?
我正在使用以下命令編譯示例程序:
$ gcc -march=i386 -mtune=i386 -mmmx -msse4 -m3dnow -m32 -o hello.exe hello.c
問題:
GCC為什么不抱怨啟用MMX,SSE4和3DNow的開關! 與所選架構i386不兼容?
因為用-march=
選擇的體系結構特別指定了可用的指令集擴展; 然后,您可以顯式添加MMX,SSE4和3DNow! 編譯器將使用的一組擴展名。 如果您認為i386是以下實現這些指令集擴展的體系結構的“基礎”體系結構,那么這是很合理的。
換種說法: -march=i386
本身減少了所使用的指令集(包括擴展名),因此產生的代碼將在386處理器上運行。 后面的選項( -mmmx
等)添加到所使用的指令集中。 -march=i386 -mmmx
的組合實際上沒有任何意義,但是,如果您明確要求該組合,那么您會得到。 編譯器需要額外的邏輯才能推斷出這種組合是無意義的。
( -march
至少為x86還設置了各種調整參數。除非我沒有記錯,否則-mtune=i386
是多余的)。
編譯器會生成無法在i386上運行的可執行文件嗎?
是的,可能; 這正是您要求它對-mmmx -msse4 -m3dnow
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.