GCC 4
Section: GNU Tools (1)Updated: 2003/12/05
機(jī)器相關(guān)選項(xiàng)(MACHINE DEPENDENT OPTION)
每一種目標(biāo)機(jī)型都有自己的特別選項(xiàng),這些選項(xiàng)用`-m '開關(guān)引導(dǎo),選擇不同的硬件型號或配置---例如, 68010還是68020,有沒有浮點(diǎn)協(xié)處理器.通過指定選項(xiàng),安裝 編譯器的一個(gè)版本能夠?yàn)樗械男吞柣蚺渲眠M(jìn)行編譯.
此外,編譯器的某些配置支持附加的特殊選項(xiàng),通常是為了在命令行上兼容這個(gè)平臺(tái)的其他編譯器.
下面是針對68000系列定義的`-m'選項(xiàng):
- -m68000
- -mc68000
- 輸出68000的目標(biāo)碼.如果編譯器按基于68000的系統(tǒng)配置,這個(gè)選項(xiàng)就是缺省選項(xiàng).
- -m68020
- -mc68020
- 輸出68020的目標(biāo)碼(而不是68000).如果編譯器按基于68020的系統(tǒng)配置,這個(gè)選項(xiàng)就是缺省選項(xiàng).
- -m68881
- 輸出包含68881浮點(diǎn)指令的目標(biāo)碼.對于大多數(shù)基于68020的系統(tǒng)這是缺省選項(xiàng),除非設(shè)置編譯器時(shí)指定了 -nfp .
- -m68030
- 輸出68030的目標(biāo)碼.如果編譯器按基于68030的系統(tǒng)配置,這個(gè)選項(xiàng)就是缺省選項(xiàng).
- -m68040
- 輸出68040的目標(biāo)碼.如果編譯器按基于68040的系統(tǒng)配置,這個(gè)選項(xiàng)就是缺省選項(xiàng).
- -m68020-40
- 輸出68040的目標(biāo)碼,但是不使用新指令.生成的代碼可以在68020/68881上,也可以在68030或 68040上較有效地運(yùn)行.
- -mfpa
- 輸出包含SUN FPA浮點(diǎn)指令的目標(biāo)碼.
- -msoft-float
- 輸出包含浮點(diǎn)庫調(diào)用的目標(biāo)碼. 警告:所需的庫不是GNU CC的組成部分.一般說來GCC使用該機(jī)型本地C 編譯器的相應(yīng)部件,但是作交叉編譯時(shí)卻不能直接使用.你必須自己管理提供合適的函數(shù)庫用于交叉編譯.
- -mshort
- 認(rèn)為int類型是16位寬,相當(dāng)于short int.
- -mnobitfield
- 不使用位域(bit-field)指令. `-m68000'隱含指定了`-mnobitfield'.
- -mbitfield
- 使用位域指令. `-m68020'隱含指定了`-mbitfield'.如果你使用未改裝的gcc,這就是 默認(rèn)選項(xiàng).
- -mrtd
- 采用另一種函數(shù)調(diào)用約定,函數(shù)接受固定數(shù)目的參數(shù),用rtd指令返回,該指令返回時(shí)彈出棧內(nèi)的參數(shù).這個(gè) 方法能夠使調(diào)用者節(jié)省一條指令,因?yàn)樗@里不需要彈出參數(shù).
這種調(diào)用約定不兼容UNIX的正常調(diào)用.因此如果你需要調(diào)用UNIX編譯器編譯的庫函數(shù),你就不能使用這個(gè)選項(xiàng).
此外,所有參數(shù)數(shù)量可變地函數(shù)必須提供函數(shù)原型(包括printf);否則編譯器會(huì)生成錯(cuò)誤的調(diào)用代碼.
另外,如果調(diào)用函數(shù)時(shí)攜帶了過多的參數(shù),編譯器將生成嚴(yán)重錯(cuò)誤的代碼. (正常情況下,多余的參數(shù)被安全無害的忽略.)
68010和68020處理器支持rtd指令,但是68000不支持.
下面是針對VAX定義的`-m'選項(xiàng):
- -munix
- 禁止輸出某些跳轉(zhuǎn)指令(aobleq等等), VAX的UNIX匯編器無法跨越長范圍(long ranges) 進(jìn)行處理.
- -mgnu
- 如果使用GNU匯編器,則輸出那些跳轉(zhuǎn)指令,
- -mg
- 輸出g-format浮點(diǎn)數(shù),取代d-format.
下面是SPARC支持的`-m'選項(xiàng)開關(guān):
-mfpu
- -mhard-float
- 輸出包含浮點(diǎn)指令的目標(biāo)碼.這是缺省選項(xiàng).
-mno-fpu
- -msoft-float
- 輸出包含浮點(diǎn)庫調(diào)用的目標(biāo)碼. 警告:沒有為SPARC提供GNU浮點(diǎn)庫.一般說來使用該機(jī)型本地C編譯器 的相應(yīng)部件,但是不能直接用于交叉編譯.你必須自己安排,提供用于交叉編譯的庫函數(shù).
-msoft-float改變了輸出文件中的調(diào)用約定;因此只有用這個(gè)選項(xiàng)編譯整個(gè)程序才有意義.
-mno-epilogue
- -mepilogue
- 使用-mepilogue (缺省)選項(xiàng)時(shí),編譯器總是把函數(shù)的退出代碼放在函數(shù)的尾部.任何在函數(shù)中間 的退出語句(例如C中的return語句)將產(chǎn)生出跳轉(zhuǎn)指令指向函數(shù)尾部.
使用-mno-epilogue選項(xiàng)時(shí),編譯器盡量在每個(gè)函數(shù)退出點(diǎn)嵌入退出代碼.
-mno-v8
- -mv8
- -msparclite
- 這三個(gè)選項(xiàng)選擇不同種類的SPARC系統(tǒng).
默認(rèn)情況下(除非特別為Fujitsu SPARClite配置), GCC生成SPARC v7目標(biāo)碼.
-mv8生成SPARC v8目標(biāo)碼.他和v7目標(biāo)碼唯一的區(qū)別是,編譯器生成整數(shù)乘法和整數(shù)除法指令, SPARC v8支持該指令,而v7體系不支持.
-msparclite生成SPARClite目標(biāo)碼.增加了SPARClite支持的整數(shù)乘法,整數(shù)除法單步掃描 (integer divide step and scan (ffs))指令. v7體系不支持這些指令.
-mcypress
- -msupersparc
- 這兩個(gè)選項(xiàng)選擇處理器型號,針對處理器進(jìn)行代碼優(yōu)化.
-mcypress選項(xiàng)(默認(rèn)項(xiàng))使編譯器對Cypress CY7C602芯片優(yōu)化代碼, SparcStation/SparcServer 3xx系列使用這種芯片.該選項(xiàng)也適用于老式的SparcStation 1, 2, IPX 等機(jī)型..
-msupersparc選項(xiàng)使編譯器對SuperSparc處理器優(yōu)化代碼, SparcStation 10, 1000 和2000系列使用這種芯片.同時(shí)該選項(xiàng)啟用完整的SPARC v8指令集.
下面是針對Convex定義的`-m'選項(xiàng):
- -mc1
- 輸出C1的目標(biāo)碼.當(dāng)編譯器對C1配置時(shí),這是默認(rèn)選項(xiàng).
- -mc2
- 輸出C2的目標(biāo)碼.當(dāng)編譯器對C2配置時(shí),這是默認(rèn)選項(xiàng).
- -margcount
- 在每個(gè)參數(shù)列表的前面放置一個(gè)參數(shù)計(jì)數(shù)字(argument count word).某些不可移植的Convex和Vax 程序需要這個(gè)參數(shù)計(jì)數(shù)字. (調(diào)試器不需要他,除非函數(shù)帶有變長參數(shù)列表;這個(gè)信息存放在符號表中.)
- -mnoargcount
- 忽略參數(shù)計(jì)數(shù)字.如果你使用未改裝的gcc,這是默認(rèn)選項(xiàng).
下面是針對AMD Am29000定義的`-m'選項(xiàng):
- -mdw
- 生成的目標(biāo)碼認(rèn)為DW置位,就是說,字節(jié)和半字操作由硬件直接支持.該選項(xiàng)是默認(rèn)選項(xiàng).
- -mnodw
- 生成的目標(biāo)碼認(rèn)為DW沒有置位.
- -mbw
- 生成的目標(biāo)碼認(rèn)為系統(tǒng)支持字節(jié)和半字寫操作.該選項(xiàng)是默認(rèn)選項(xiàng).
- -mnbw
- 生成的目標(biāo)碼認(rèn)為系統(tǒng)不支持字節(jié)和半字寫操作.該選項(xiàng)隱含開啟了`-mnodw'選項(xiàng).
- -msmall
- 使用小內(nèi)存模式,小內(nèi)存模式假設(shè)所有函數(shù)的地址位于某個(gè)256 KB段內(nèi),或者所有函數(shù)的絕對地址小于256K.這樣 就可以用call指令代替const, consth, calli指令序列.
- -mlarge
- 假設(shè)不能使用call指令;這是默認(rèn)選項(xiàng).
- -m29050
- 輸出Am29050的目標(biāo)碼.
- -m29000
- 輸出Am29000的目標(biāo)碼.這是默認(rèn)選項(xiàng).
- -mkernel-registers
- 生成的目標(biāo)碼引用gr64-gr95寄存器而不是gr96-gr127寄存器.該選項(xiàng)可以用于編譯 內(nèi)核代碼,內(nèi)核需要一組全局寄存器,這些全局寄存器和用戶模式使用的寄存器完全無關(guān).
注意,使用這個(gè)選項(xiàng)時(shí), `-f'選項(xiàng)中的寄存器名字必須是normal, user-mode, names.
- -muser-registers
- 使用普通全局寄存器集gr96-gr127.這是默認(rèn)選項(xiàng).
- -mstack-check
- 在每次堆棧調(diào)整后插入一條__msp_check調(diào)用.這個(gè)選項(xiàng)常用于內(nèi)核代碼.
下面是針對Motorola 88K體系定義的`-m'選項(xiàng):
- -m88000
- 生成的目標(biāo)碼可以在m88100和m88110上正常工作.
- -m88100
- 生成的目標(biāo)碼在m88100上工作的最好,但也可以在m88110上運(yùn)行.
- -m88110
- 生成的目標(biāo)碼在m88110上工作的最好,可能不能在m88100上運(yùn)行.
- -midentify-revision
- 在匯編器的輸出端包含一條ident指令,記錄源文件名,編譯器名字和版本,時(shí)標(biāo),以及使用的編譯選項(xiàng),
- -mno-underscores
- 在匯編器的輸出端,符號名字前面不添加下劃線.默認(rèn)情況是在每個(gè)名字前面增加下劃線前綴.
- -mno-check-zero-division
- -mcheck-zero-division
- 早期型號的88K系統(tǒng)在除零操作上存在問題,特定情況下許多機(jī)器無法自陷.使用這些選項(xiàng)可以避免包含(或可以 顯明包含)附加的代碼,這些代碼能夠檢查除零錯(cuò),發(fā)送例外信號. GCC所有88K的配置默認(rèn)使用 `-mcheck-zero-division'選項(xiàng).
- -mocs-debug-info
- -mno-ocs-debug-info
- 包含(或忽略)附加的調(diào)試信息(關(guān)于每個(gè)棧架結(jié)構(gòu)中寄存器的使用), 88Open Object Compatibility Standard, ``OCS'',對此信息做了說明. GDB不需要這些額外信息. DG/UX, SVr4,和Delta 88 SVr3.2的默認(rèn)配置是包含調(diào)試信息,其他88k機(jī)型的默認(rèn)配置是忽略這個(gè)信息.
- -mocs-frame-position
- -mno-ocs-frame-position
- 強(qiáng)制(或不要求)把寄存器值存儲(chǔ)到棧架結(jié)構(gòu)中的指定位置(按OCS的說明). DG/UX, Delta88 SVr3.2和 BCS的默認(rèn)配置使用`-mocs-frame-position'選項(xiàng);其他88k機(jī)型的默認(rèn)配置是 `-mno-ocs-frame-position'.
- -moptimize-arg-area
- -mno-optimize-arg-area
- 控制如何在堆棧結(jié)構(gòu)中存儲(chǔ)函數(shù)參數(shù). `-moptimize-arg-area'節(jié)省空間,但是有可能宕掉某些 調(diào)試器(不是GDB). `-mno-optimize-arg-area'證實(shí)比標(biāo)準(zhǔn)選項(xiàng)好.默認(rèn)情況下GCC不優(yōu)化參數(shù)域.
- -mshort-data-
- num通過和r0關(guān)聯(lián),產(chǎn)生較小的數(shù)據(jù)引用(data reference),這樣就可以用單指令調(diào)入 一個(gè)數(shù)值(而不是平常的雙指令).用戶通過選項(xiàng)中的num控制改變哪種數(shù)據(jù)引用.例如,如果你指定了 `-mshort-data-512',那么受影響的數(shù)據(jù)引用是小于512字節(jié)的數(shù)據(jù)移動(dòng). -mshort-data-num選項(xiàng)對大于64K的num 無效.
-mserialize-volatile
- -mno-serialize-volatile
- 產(chǎn)生,或不產(chǎn)生代碼來保證對易變內(nèi)存訪問的結(jié)果一致.
對于常用的處理器子型號, GNU CC始終默認(rèn)保證這種一致性.如何實(shí)現(xiàn)結(jié)果一致取決于處理器子型號.
m88100處理器不對內(nèi)存引用重新安排,因此訪問結(jié)果始終一致.如果使用了`-m88100'選項(xiàng), GNU CC 不產(chǎn)生任何針對結(jié)果一致的特別指令.
m88110處理器的內(nèi)存引用順序并不始終符合指令請求的引用順序.特別是某條讀取指令可能在先前的存儲(chǔ)指令之前執(zhí)行. 多處理器環(huán)境下,亂序訪問擾亂了易變內(nèi)存訪問的結(jié)果一致.因此當(dāng)使用`-m88000'或`-m88110' 選項(xiàng)時(shí), GNU CC在適當(dāng)?shù)臅r(shí)候產(chǎn)生特別的指令迫使執(zhí)行順序正確.
這些用于保證一致性的額外代碼有可能影響程序的性能.如果你確認(rèn)能夠安全地放棄這種保證,你可以使用 `-mno-serialize-volatile'選項(xiàng).
如果你使用`-m88100'選項(xiàng),但是需要在m88110處理器上運(yùn)行時(shí)的結(jié)果一致,你應(yīng)該加上 `-mserialize-volatile'選項(xiàng).
-msvr4
- -msvr3
- 打開(`-msvr4')或關(guān)閉(`-msvr3')和System V第四版(SVr4)相關(guān)的 編譯器擴(kuò)展.效果如下:
- *
- 輸出哪種匯編語法(你可以使用`-mversion-03.00'選項(xiàng)單獨(dú)選擇).
- *
- `-msvr4'使C預(yù)處理器識(shí)別`#pragma weak'指令
- *
- `-msvr4'使GCC輸出額外的聲明指令(declaration directive),用于SVr4.
除了SVr4配置, `-msvr3'是所有m88K配置的默認(rèn)選項(xiàng).
- -mtrap-large-shift
- -mhandle-large-shift
- 包含一些指令,用于檢測大于31位的位移(bit-shift);根據(jù)相應(yīng)的選項(xiàng),對這樣的位移發(fā)出自陷 (trap)或執(zhí)行適當(dāng)?shù)奶幚泶a.默認(rèn)情況下, GCC對大位移不做特別處理.
- -muse-div-instruction
- 很早以前的88K型號沒有(div)除法指令,因此默認(rèn)情況下GCC避免產(chǎn)生這條指令.而這個(gè)選項(xiàng)告訴GCC該指令是 安全的.
- -mversion-03.00
- 在DG/UX配置中存在兩種風(fēng)格的SVr4.這個(gè)選項(xiàng)修改-msvr4 ,選擇hybrid-COFF或 real-ELF風(fēng)格.其他配置均忽略該選項(xiàng).
- -mwarn-passed-structs
- 如果某個(gè)函數(shù)把結(jié)構(gòu)當(dāng)做參數(shù)或結(jié)果傳遞, GCC發(fā)出警告.隨著C語言的發(fā)展,人們已經(jīng)改變了傳遞結(jié)構(gòu)的約定, 它往往導(dǎo)致移植問題.默認(rèn)情況下, GCC不會(huì)發(fā)出警告.
下面的選項(xiàng)用于IBM RS6000:
-mfp-in-toc
- -mno-fp-in-toc
- 控制是否把浮點(diǎn)常量放到內(nèi)容表(TOC)中,內(nèi)容表存放所有的全局變量和函數(shù)地址.默認(rèn)情況下, GCC把浮點(diǎn)常量放到 這里;如果TOC溢出, `-mno-fp-in-toc'選項(xiàng)能夠減少TOC的大小,這樣就可以避免溢出.
下面的`-m'選項(xiàng)用于IBM RT PC:
- -min-line-mul
- 對于整數(shù)乘法使用嵌入代碼.這是默認(rèn)選項(xiàng).
- -mcall-lib-mul
- 對于整數(shù)乘法使用lmul$$ .
- -mfull-fp-blocks
- 生成全尺寸浮點(diǎn)數(shù)據(jù)塊,包括IBM建議的最少數(shù)量的活動(dòng)空間(scratch space).這是默認(rèn)選項(xiàng).
- -mminimum-fp-blocks
- 不要在浮點(diǎn)數(shù)據(jù)塊中包括額外的活動(dòng)空間.這樣就產(chǎn)生較小但是略慢的可執(zhí)行程序,因?yàn)榛顒?dòng)空間必須動(dòng)態(tài)分配.
- -mfp-arg-in-fpregs
- 采用不兼容IBM調(diào)用約定的調(diào)用序列,通過浮點(diǎn)寄存器傳送浮點(diǎn)參數(shù).注意,如果指定了這個(gè)選項(xiàng), varargs.h和stdargs.h將無法支持浮點(diǎn)單元.
- -mfp-arg-in-gregs
- 使用正常的調(diào)用約定處理浮點(diǎn)參數(shù).這是默認(rèn)選項(xiàng).
- -mhc-struct-return
- 通過內(nèi)存返回大于一個(gè)字的結(jié)構(gòu),而不是通過寄存器.用于兼容MetaWare HighC (hc)編譯器.使用 `-fpcc-struct-return'選項(xiàng)可以兼容Portable C編譯器(pcc).
- -mnohc-struct-return
- 如果可以,通過寄存器返回某些大于一個(gè)字的結(jié)構(gòu).這是默認(rèn)選項(xiàng).如果打算兼容IBM提供的編譯器,請使用 `-fpcc-struct-return'或`-mhc-struct-return'選項(xiàng).
下面的`-m'選項(xiàng)用于MIPS家族的計(jì)算機(jī):
- -mcpu=cpu-type
- 生成指令的時(shí)候,假設(shè)默認(rèn)的機(jī)器類型是cpu-type .默認(rèn)情況下的cpu-type是 default, GCC將選取任何機(jī)型上都是最長周期時(shí)間的指令,這樣才能使代碼在所有的MIPS處理器上以合理 的速度運(yùn)行. cpu-type的其他選擇是r2000, r3000, r4000,和 r6000.雖然選定某個(gè)cpu-type后, GCC將針對選定的芯片安排對應(yīng)的工作,但是如果 不指定?? -mips2或-mips3選項(xiàng),編譯器不會(huì)輸出任何不符合MIPS ISA (instruction set architecture)一級的代碼.
- -mips2
- 輸出MIPS ISA二級指令(可能的擴(kuò)展,如平方根指令). -mcpu=r4000或-mcpu=r6000 選項(xiàng)必須和-mips2聯(lián)用.
- -mips3
- 輸出MIPS ISA三級指令(64位指令). -mcpu=r4000選項(xiàng)必須和-mips2聯(lián)用. (譯注:疑為-mips3)
- -mint64
- -mlong64
- -mlonglong128
- 這些選項(xiàng)目前不起作用.
- -mmips-as
- 產(chǎn)生用于MIPS匯編器的代碼,同時(shí)使用mips-tfile添加普通的調(diào)試信息.對于大多數(shù)平臺(tái)這是 默認(rèn)選項(xiàng),除了OSF/1參考平臺(tái),它使用OSF/rose目標(biāo)格式.如果打開了任一個(gè)-ggdb, -gstabs,或-gstabs+選項(xiàng)開關(guān), mips-tfile程序就把stab封裝在MIPS ECOFF里面.
- -mgas
- 產(chǎn)生用于GNU匯編器的代碼.在OSF/1參考平臺(tái)上這是默認(rèn)選項(xiàng),它使用OSF/rose目標(biāo)格式.
- -mrnames
- -mno-rnames
- -mrnames開關(guān)選項(xiàng)告訴輸出代碼使用MIPS軟件名稱說明寄存器,而不是硬件名稱(就是說,用 a0代替$4). GNU匯編器不支持-mrnames選項(xiàng),而MIPS匯編器則運(yùn)行MIPS C預(yù)處理器處理源文件. -mno-rnames是默認(rèn)選項(xiàng).
- -mgpopt
- -mno-gpopt
- -mgpopt開關(guān)選項(xiàng)要求在正文段中把所有的數(shù)據(jù)聲明寫到指令前面,使各種MIPS匯編器對短類型全局 或靜態(tài)數(shù)據(jù)項(xiàng)(short global or static data items)輸出單字內(nèi)存訪問而不是雙字內(nèi)存訪問.當(dāng)打開編譯優(yōu)化 時(shí),這是默認(rèn)功能.
- -mstats
- -mno-stats
- 每次處理完非嵌入函數(shù)(non-inline function)后, -mstats開關(guān)選項(xiàng)使編譯器向標(biāo)準(zhǔn)錯(cuò)誤文件 輸出一行關(guān)于程序的統(tǒng)計(jì)資料(保存的寄存器數(shù)目,堆棧大小,等等).
- -mmemcpy
- -mno-memcpy
- -mmemcpy開關(guān)選項(xiàng)使所有的塊移動(dòng)操作調(diào)用適當(dāng)?shù)?/font>string函數(shù)(memcpy或 bcopy),而不是生成嵌入代碼.
- -mmips-tfile
- -mno-mips-tfile
- 當(dāng)MIPS匯編器生成mips-tfile文件(用于幫助調(diào)試)后, -mno-mips-tfile 開關(guān)選項(xiàng)阻止編譯器使用mips-tfile后期處理(postprocess)目標(biāo)文件.不運(yùn)行 mips-tfile就沒有調(diào)試器關(guān)注的局部變量.另外, stage2和stage3目標(biāo)文件將把 臨時(shí)文件名傳遞給匯編器,嵌在目標(biāo)文件中,這意味著不比較目標(biāo)文件是否相同.
- -msoft-float
- 輸出包含浮點(diǎn)庫調(diào)用. 警告: 所需庫不是GNU CC的一部分.一般說來使用該機(jī)型本地C編譯器的相應(yīng)部件, 但是不能直接用于交叉編譯,你必須自己安排,提供交叉編譯適用的庫函數(shù).
- -mhard-float
- 輸出包含浮點(diǎn)指令.如果編譯器沒有被改動(dòng),這就是默認(rèn)選項(xiàng).
- -mfp64
- 編譯器認(rèn)為狀態(tài)字的FR置位(on),也就是說存在32 64-bit浮點(diǎn)寄存器,而不是32 32-bit 浮點(diǎn)寄存器.同時(shí)必須打開-mcpu=r4000和-mips3開關(guān).
- -mfp32
- 認(rèn)為存在32 32-bit浮點(diǎn)寄存器.這是默認(rèn)選項(xiàng).
-mabicalls
- -mno-abicalls
- 輸出(或不輸出) .abicalls, .cpload,和.cprestore偽指令,某些 System V.4版本用于位置無關(guān)代碼.
- -mhalf-pic
- -mno-half-pic
- -mhalf-pic開關(guān)選項(xiàng)要求把外部引用的指針放到數(shù)據(jù)段,并且載入內(nèi)存,而不放到正文段.該選項(xiàng)目前 不起作用.
- -G num
- 把小于等于num字節(jié)的全局或靜態(tài)數(shù)據(jù)放到小的數(shù)據(jù)段或bss段,而不是普通的數(shù)據(jù)段或bss段. 這樣匯編器可以輸出基于全局指針(gp或$28),的單字內(nèi)存訪問指令而非普通的雙字指令.默認(rèn)情況下, 用MIPS匯編器時(shí)num是8,而GNU匯編器則為0.另外, -Gnum選項(xiàng)也被傳遞 給匯編器和連接器.所有的模塊必須在相同的-Gnum值下編譯.
- -nocpp
- 匯編用戶匯編文件(帶有`.s'后綴)時(shí),告訴MIPS匯編器不要運(yùn)行預(yù)處理器.
下面的`-m'選項(xiàng)用于Intel 80386族計(jì)算機(jī): -m486
- -mno-486
- 控制是否生成對486優(yōu)化的代碼.
- -msoft-float
- 輸出包含浮點(diǎn)庫調(diào)用. 警告: 所需庫不是GNU CC的一部分.一般說來使用該機(jī)型本地C編譯器的相應(yīng)部件, 但是不能直接用于交叉編譯,你必須自己安排,提供交叉編譯適用的庫函數(shù).
在函數(shù)把浮點(diǎn)返回值放在80387寄存器棧的機(jī)器上,即使設(shè)置了`-msoft-float'選項(xiàng),也可能會(huì)發(fā)出 一些浮點(diǎn)操作碼.
- -mno-fp-ret-in-387
- 不用FPU寄存器返回函數(shù)值.
通常函數(shù)調(diào)用約定把float和double的返回值放在FPU寄存器中,即使不存在FPU. 這種作法的理念是操作系統(tǒng)應(yīng)該仿真出FPU.
而`-mno-fp-ret-in-387'選項(xiàng)使浮點(diǎn)值通過普通的CPU寄存器返回.