簡體   English   中英

-march和指令集開關之間是否會有沖突?

[英]Can there be conflict between `-march` and instruction set switches?

我正在使用以下命令編譯示例程序:

$ gcc -march=i386 -mtune=i386 -mmmx -msse4 -m3dnow -m32 -o hello.exe hello.c

問題:

  1. GCC為什么不抱怨啟用MMX,SSE4和3DNow的開關! 與所選架構i386不兼容?
  2. 編譯器會生成無法在i386上運行的可執行文件嗎?

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM