• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • GCC 手冊(再續)

    發表于:2007-05-26來源:作者:點擊數: 標簽:
    續 -print-libgcc-file-name 和`-print-file-name=libgcc.a'一樣. -print-prog-name=program 類似于`-print-file-name',但是查找程序program如`cpp'. 優化選項(OPTI MI ZATION OPTION) 這些選項控制多種優化措施: -O -O1 優化.對于大函數,優化編譯占用稍微多

    -print-libgclearcase/" target="_blank" >cc-file-name

    和`-print-file-name=libgcc.a'一樣.

    -print-prog-name=program

    類似于`-print-file-name',但是查找程序program如`cpp'.



    優化選項(OPTIMIZATION OPTION)

    這些選項控制多種優化措施:

    -O

    -O1

    優化.對于大函數,優化編譯占用稍微多的時間和相當大的內存.

    不使用`-O'選項時,編譯器的目標是減少編譯的開銷,使編譯結果能夠調試.語句是獨
    立的:如果在 兩條語句之間用斷點中止程序,你可以對任何變量重新賦值,或者在函
    數體內把程序計數器指到其他語句,以及從源程序中 精確地獲取你期待的結果.

    不使用`-O'選項時,只有聲明了register的變量才分配使用寄存器.編譯結果比不用
    `-O'選項的PCC要略遜一籌.

    使用了`-O'選項,編譯器會試圖減少目標碼的大小和執行時間.

    如果指定了`-O'選項, `-fthread-jumps'和`-fdefer-pop'選項將被 打開.在有del
    ay slot的機器上, `-fdelayed-branch'選項將被打開.在即使沒有幀指針 (frame
    pointer)也支持調試的機器上, `-fomit-frame-pointer'選項將被打開.某些機器上
    還可能會打開其他選項.

    -O2

    多優化一些.除了涉及空間和速度交換的優化選項,執行幾乎所有的優化工作.例如不
    進行循環展開(loop unrolling)和函數內嵌(inlining).和-O選項比較,這個選項既
    增加了編譯時間,也提高了生成代碼的 運行效果.

    -O3

    優化的更多.除了打開-O2所做的一切,它還打開了-finline-functions選項.

    -O0

    不優化.

    如果指定了多個-O選項,不管帶不帶數字,最后一個選項才是生效的選項.

    諸如`-fflag'此類的選項描述一些機器無關的開關.大多數開關具有肯定和否定兩種
    格式; `-ffoo'開關選項的否定格式應該是`-fno-foo'.下面的列表只展示了一種格
    式---那個不是 默認選項的格式.你可以通過去掉或添加`no-'構造出另一種格式.


    -ffloat-store

    不要在寄存器中存放浮點變量.這樣可以防止某些機器上不希望的過高精度,如6800
    0的浮點寄存器(來自 68881)保存的精度超過了double應該具有的精度.

    對于大多數程序,過高精度只有好處.但是有些程序嚴格依賴于IEEE浮點數的定義.對
    這樣的程序可以使用 `-ffloat-store'選項.

    -fmemoize-lookups

    -fsave-memoized

    使用探索法(heuristic)進行更快的編譯(僅對C++).默認情況下不使用探索法.由于
    探索法只對某些輸入文件 有效,其他程序的編譯速度會變得更慢.

    第一次編譯器必須對成員函數(或對成員數據的引用)建立一個調用.它必須(1)判斷
    出這個類是否實現了那個名字的 成員函數; (2)決定調用哪個成員函數(涉及到推測
    需要做哪種類型轉換); (3)檢查成員函數對調用者是否可見.所有這些構成 更慢的
    編譯.一般情形,第二次對成員函數(或對成員數據的引用)建立的調用,必須再次經過
    相同長度的處理.這意味著象 這樣的代碼

    cout << "This " << p << " has " << n << " legs.\n";

    對整個三步驟要做六次遍歷.通過使用軟件緩存, ``命中''能夠顯著地減少這種代價
    然而不幸的是,使用這種緩存 必須實現其他機制,帶來了它自己的開銷. `-fmemoi
    ze-lookups'選項打開軟件緩存.

    因為函數的正文環境不同,函數對成員和成員函數的訪問權(可見性)也可能不同, g
    ++可能需要刷新緩存. 使用`-fmemoize-lookups'選項,每編譯完一個函數就刷新緩
    存.而`-fsave-memoized'選項 也啟用同樣的緩存,但是當編譯器發覺最后編譯的函
    數的正文環境產生的訪問權和下一個待編譯的函數相同,編譯器就 保留緩存內容.這
    對某個類定義許多成員函數時非常有用:除了某些其他類的友函數,每個成員函數擁
    有和其他成員函數完全一樣 的訪問權,因而無需刷新緩存.

    -fno-default-inline

    默認為不要把成員函數內嵌,因為它們定義在類的作用域內(僅C++).

    -fno-defer-pop

    一旦函數返回,參數就立即彈出.對于那些調用函數后必須彈出參數的機器,編譯器一
    般情況下讓幾次函數調用的參數 堆積在棧上,然后一次全部彈出.

    -fforce-mem

    做數學運算前把將要使用的內存操作數送入寄存器.通過把內存訪問轉換成潛在的公
    共子表達式,它可能產生較好的目標碼. 如果它們不是公共子表達式,指令組合應該
    消除各自的寄存器載荷.我樂意傾聽不同意見.

    -fforce-addr

    做數學運算前把將要使用的內存地址常數送入寄存器.它可能和`-fforce-mem'一樣
    產生較好的 目標碼.我樂意傾聽不同意見.

    -fomit-frame-pointer

    對于不需要幀指針(frame pointer)的函數,不要在寄存器中保存幀指針.這樣能夠避
    免保存,設置和恢復 幀指針的指令;同時對許多函數提供一個額外的寄存器. 但是在
    大多數機器上將無法調試.

    某些機器上,如Vax,這個選項無效,因為標準調用序列自動處理幀指針,通過假裝不存
    在而不保存任何東西.機器描述宏 FRAME_POINTER_REQUIRED控制目標機是否支持這
    個選項.

    -finline-functions

    把所有簡單的函數集成進調用者.編譯器探索式地決定哪些函數足夠簡單,值得這種
    集成.

    如果集成了所有給定函數的調用,而且函數聲明為static,那么一般說來GCC有權不按
    匯編代碼輸出函數.

    -fcaller-saves

    允許在寄存器里分配數值,但是這個方案通常受到各個函數調用的沖擊,因此GCC生成
    額外的代碼,在函數調用的 前后保存和復原寄存器內容.僅當生成代碼看上去優于反
    之結果時才實現這樣的分配.

    某些機器上該選項默認為允許,通常這些機器沒有調用保護寄存器代替使用.

    -fkeep-inline-functions

    即使集成了某個函數的所有調用,而且該函數聲明為static,仍然輸出這個函數一個
    獨立的,運行時可調用 的版本.

    -fno-function-cse

    不要把函數地址存入寄存器;讓調用固定函數的指令顯式給出函數地址.

    這個選項產生效率較低的目標碼,但是如果不用這個選項,某些不尋常的hack,改變匯
    編器的輸出,可能因優化而帶來 困惑.

    -fno-peephole

    禁止任何機器相關的peephole優化.

    -ffast-math

    這個選項出于速度優化,允許GCC違反某些ANSI或IEEE規則/規格.例如,它允許編譯器
    假設sqrt 函數的參數是非負數.

    這個選項不被任何`-O'選項打開,因為對于嚴格依靠IEEE或ANSI規則/規格實現的數
    學函數,程序可能 會產生錯誤的結果.

    下列選項控制特定的優化. `-O2'選項打開下面的大多數優化項,除了`-funroll-lo
    ops'和 `-funroll-all-loops'項.

    而`-O'選項通常打開`-fthread-jumps'和`-fdelayed-branch' 優化項,但是特定的
    機器上的默認優化項有可能改變.

    如果特別情況下非常需要``微調''優化,你可以使用下面的選項.

    -fstrength-reduce

    執行循環強度縮小(loop strength reduction)優化,并且消除重復變量.

    -fthread-jumps

    執行優化的地點是,如果某個跳轉分支的目的地存在另一個條件比較,而且該條件比
    較包含在前一個比較語句之內,那么 執行優化.根據條件是true或者false,前面那條
    分支重定向到第二條分支的目的地或者緊跟在第二條分支后面.

    -funroll-loops

    執行循環展開(loop unrolling)優化.僅對循環次數能夠在編譯時或運行時確定的循
    環實行.

    -funroll-all-loops

    執行循環展開(loop unrolling)優化.對所有循環實行.通常使程序運行的更慢.

    -fcse-follow-jumps

    在公共子表達式消元(common subexpression elimination)的時候,如果沒有其他路
    徑到達某個跳轉的 目的地,就掃過這條jump指令.例如,如果CSE遇到帶有else從句的
    if語句,當條件測試為 false時, CSE就跟在jump后面.

    -fcse-skip-blocks

    它類似于`-fcse-follow-jumps'選項,但是CSE跟在條件跳轉后面,條件跳轉跳過了
    語句塊(block).如果CSE遇到一條簡單的if語句,不帶else從句, `-fcse-skip-bloc
    ks'選項將導致CSE跟在if產生的跳轉后面.

    -frerun-cse-after-loop

    執行循環優化后,重新進行公共子表達式消元.

    -felide-constructors

    如果看上去合理就省略構造子(僅C++).根據這個選項,對于下面的代碼, GNU C++直
    接從調用foo 初始化y,而無需通過臨時變量:

    A foo (); A y = foo ();

    如果沒有這個選項, GNU C++首先通過調用類型A 合適的構造子初始化y;然后把 fo
    o的結果賦給臨時變量;最后,用臨時變量替換`y'的初始值.

    ANSI C++標準草案規定了默認行為(`-fno-elide-constructors').如果程序的構造
    子存在 副效應, `-felide-constructors'選項能夠使程序有不同的表現,因為可能
    忽略一些構造子的調用.

    -fexpensive-optimizations

    執行一些相對開銷較大的次要優化.

    -fdelayed-branch

    如果對目標機支持這個功能,它試圖重新排列指令,以便利用延遲分支(delayed bra
    nch)指令后面的指令空隙.

    -fschedule-insns

    如果對目標機支持這個功能,它試圖重新排列指令,以便消除因數據未緒造成的執行
    停頓.這可以幫助浮點運算或內存訪問 較慢的機器調取指令,允許其他指令先執行,
    直到調取指令或浮點運算完成.

    -fschedule-insns2

    類似于`-fschedule-insns'選項,但是在寄存器分配完成后,需要一個額外的指令調
    度過程.對于 寄存器數目相對較少,而且取內存指令大于一個周期的機器,這個選項
    特別有用.



    目標機選項(TARGET OPTION)

    缺省情況下, GNU CC編譯出本機類型的目標碼.然而也可以把他安裝成交叉編譯器,
    為其他機型編譯程序.事實上,針對不同的目標機,可以同時安裝GNU CC相應的配置
    然后用`-b'選項指定 目標機種.

    順便提一下,新版本和舊版本的GNU CC可以共存.其中一個版本(可能是最新的那個)
    為缺省版本,但是有時候你希望使用 其他版本.

    -b machine

    參數machine指出編譯的目標機種.這個選項用于安裝為交叉編譯器的GNU CC.

    參數machine的值和配置GNU CC交叉編譯器時設置的機器類型一樣.例如,如果交叉編
    譯器配置有 `configure i386v',意思是編譯80386上的System V目標碼,那么你可以
    通過`-b i386v'運行交叉編譯器.

    如果沒有指定`-b'選項,通常指編譯本機目標碼.

    -V version

    參數version指出運行哪個版本的GNU CC.這個選項用于安裝了多個版本的GCC.例如
    ,如果 version是`2.0',意味著運行GNU CC 2.0版.

    如果沒有指定`-V'選項,缺省版本取決于GNU CC的安裝方式,一般說來推薦使用通用
    版本.



    機器相關選項(MACHINE DEPENDENT OPTION)

    每一種目標機型都有自己的特別選項,這些選項用`-m '開關引導,選擇不同的硬件型
    號或配置---例如, 68010還是68020,有沒有浮點協處理器.通過指定選項,安裝 編譯
    器的一個版本能夠為所有的型號或配置進行編譯.

    此外,編譯器的某些配置支持附加的特殊選項,通常是為了在命令行上兼容這個平臺
    的其他編譯器.

    下面是針對68000系列定義的`-m'選項:

    -m68000

    -mc68000

    輸出68000的目標碼.如果編譯器按基于68000的系統配置,這個選項就是缺省選項.


    -m68020

    -mc68020

    輸出68020的目標碼(而不是68000).如果編譯器按基于68020的系統配置,這個選項就
    是缺省選項.

    -m68881

    輸出包含68881浮點指令的目標碼.對于大多數基于68020的系統這是缺省選項,除非
    設置編譯器時指定了 -nfp .

    -m68030

    輸出68030的目標碼.如果編譯器按基于68030的系統配置,這個選項就是缺省選項.


    -m68040

    輸出68040的目標碼.如果編譯器按基于68040的系統配置,這個選項就是缺省選項.


    -m68020-40

    輸出68040的目標碼,但是不使用新指令.生成的代碼可以在68020/68881上,也可以在
    68030或 68040上較有效地運行.

    -mfpa

    輸出包含SUN FPA浮點指令的目標碼.

    -msoft-float

    輸出包含浮點庫調用的目標碼. 警告:所需的庫不是GNU CC的組成部分.一般說來GC
    C使用該機型本地C 編譯器的相應部件,但是作交叉編譯時卻不能直接使用.你必須自
    己管理提供合適的函數庫用于交叉編譯.

    -mshort

    認為int類型是16位寬,相當于short int.

    -mnobitfield

    不使用位域(bit-field)指令. `-m68000'隱含指定了`-mnobitfield'.

    -mbitfield

    使用位域指令. `-m68020'隱含指定了`-mbitfield'.如果你使用未改裝的gcc,這就
    是 默認選項.

    -mrtd

    采用另一種函數調用約定,函數接受固定數目的參數,用rtd指令返回,該指令返回時
    彈出棧內的參數.這個 方法能夠使調用者節省一條指令,因為他這里不需要彈出參數


    這種調用約定不兼容UNIX的正常調用.因此如果你需要調用UNIX編譯器編譯的庫函數
    ,你就不能使用這個選項.

    此外,所有參數數量可變地函數必須提供函數原型(包括printf);否則編譯器會生成
    錯誤的調用代碼.

    另外,如果調用函數時攜帶了過多的參數,編譯器將生成嚴重錯誤的代碼. (正常情況
    下,多余的參數被安全無害的忽略.)

    68010和68020處理器支持rtd指令,但是68000不支持.

    下面是針對VAX定義的`-m'選項:

    -munix

    禁止輸出某些跳轉指令(aobleq等等), VAX的UNIX匯編器無法跨越長范圍(long ran
    ges) 進行處理.

    -mgnu

    如果使用GNU匯編器,則輸出那些跳轉指令,

    -mg

    輸出g-format浮點數,取代d-format.

    下面是SPARC支持的`-m'選項開關:

    -mfpu

    -mhard-float

    輸出包含浮點指令的目標碼.這是缺省選項.

    -mno-fpu

    -msoft-float

    輸出包含浮點庫調用的目標碼. 警告:沒有為SPARC提供GNU浮點庫.一般說來使用該
    機型本地C編譯器 的相應部件,但是不能直接用于交叉編譯.你必須自己安排,提供用
    于交叉編譯的庫函數.

    -msoft-float改變了輸出文件中的調用約定;因此只有用這個選項編譯整個程序才有
    意義.

    -mno-epilogue

    -mepilogue

    使用-mepilogue (缺省)選項時,編譯器總是把函數的退出代碼放在函數的尾部.任何
    在函數中間 的退出語句(例如C中的return語句)將產生出跳轉指令指向函數尾部.


    使用-mno-epilogue選項時,編譯器盡量在每個函數退出點嵌入退出代碼.

    -mno-v8

    -mv8

    -msparclite

    這三個選項選擇不同種類的SPARC系統.

    默認情況下(除非特別為Fujitsu SPARClite配置), GCC生成SPARC v7目標碼.

    -mv8生成SPARC v8目標碼.他和v7目標碼唯一的區別是,編譯器生成整數乘法和整數
    除法指令, SPARC v8支持該指令,而v7體系不支持.

    -msparclite生成SPARClite目標碼.增加了SPARClite支持的整數乘法,整數除法單步
    掃描 (integer divide step and scan (ffs))指令. v7體系不支持這些指令.

    -mcypress

    -msupersparc

    這兩個選項選擇處理器型號,針對處理器進行代碼優化.

    -mcypress選項(默認項)使編譯器對Cypress CY7C602芯片優化代碼, SparcStation
    /SparcServer 3xx系列使用這種芯片.該選項也適用于老式的SparcStation 1, 2,
    IPX 等機型..

    -msupersparc選項使編譯器對SuperSparc處理器優化代碼, SparcStation 10, 100
    0 和2000系列使用這種芯片.同時該選項啟用完整的SPARC v8指令集.

    下面是針對Convex定義的`-m'選項:

    -mc1

    輸出C1的目標碼.當編譯器對C1配置時,這是默認選項.

    -mc2

    輸出C2的目標碼.當編譯器對C2配置時,這是默認選項.

    -margcount

    在每個參數列表的前面放置一個參數計數字(argument count word).某些不可移植
    的Convex和Vax 程序需要這個參數計數字. (調試器不需要他,除非函數帶有變長參
    數列表;這個信息存放在符號表中.)

    -mnoargcount

    忽略參數計數字.如果你使用未改裝的gcc,這是默認選項.

    下面是針對AMD Am29000定義的`-m'選項:

    -mdw

    生成的目標碼認為DW置位,就是說,字節和半字操作由硬件直接支持.該選項是默認選
    項.

    -mnodw

    生成的目標碼認為DW沒有置位.

    -mbw

    生成的目標碼認為系統支持字節和半字寫操作.該選項是默認選項.

    -mnbw

    生成的目標碼認為系統不支持字節和半字寫操作.該選項隱含開啟了`-mnodw'選項.


    -msmall

    使用小內存模式,小內存模式假設所有函數的地址位于某個256 KB段內,或者所有函
    數的絕對地址小于256K.這樣 就可以用call指令代替const, consth, calli指令序
    列.

    -mlarge

    假設不能使用call指令;這是默認選項.

    -m29050

    輸出Am29050的目標碼.

    -m29000

    輸出Am29000的目標碼.這是默認選項.

    -mkernel-registers

    生成的目標碼引用gr64-gr95寄存器而不是gr96-gr127寄存器.該選項可以用于編譯
    內核代碼,內核需要一組全局寄存器,這些全局寄存器和用戶模式使用的寄存器完全
    無關.

    注意,使用這個選項時, `-f'選項中的寄存器名字必須是normal, user-mode, name
    s.

    -muser-registers

    使用普通全局寄存器集gr96-gr127.這是默認選項.

    -mstack-check

    在每次堆棧調整后插入一條__msp_check調用.這個選項常用于內核代碼.

    下面是針對Motorola 88K體系定義的`-m'選項:

    -m88000

    生成的目標碼可以在m88100和m88110上正常工作.

    -m88100

    生成的目標碼在m88100上工作的最好,但也可以在m88110上運行.

    -m88110

    生成的目標碼在m88110上工作的最好,可能不能在m88100上運行.

    -midentify-revision

    在匯編器的輸出端包含一條ident指令,記錄源文件名,編譯器名字和版本,時標,以及
    使用的編譯選項,

    -mno-underscores

    在匯編器的輸出端,符號名字前面不添加下劃線.默認情況是在每個名字前面增加下
    劃線前綴.

    -mno-check-zero-division

    -mcheck-zero-division

    早期型號的88K系統在除零操作上存在問題,特定情況下許多機器無法自陷.使用這些
    選項可以避免包含(或可以 顯明包含)附加的代碼,這些代碼能夠檢查除零錯,發送例
    外信號. GCC所有88K的配置默認使用 `-mcheck-zero-division'選項.

    -mocs-debug-info

    -mno-ocs-debug-info

    包含(或忽略)附加的調試信息(關于每個棧架結構中寄存器的使用), 88Open Objec
    t Compatibility Standard, ``OCS'',對此信息做了說明. GDB不需要這些額外信息
    DG/UX, SVr4,和Delta 88 SVr3.2的默認配置是包含調試信息,其他88k機型的默認
    配置是忽略這個信息.

    -mocs-frame-position

    -mno-ocs-frame-position

    強制(或不要求)把寄存器值存儲到棧架結構中的指定位置(按OCS的說明). DG/UX,
    Delta88 SVr3.2和 BCS的默認配置使用`-mocs-frame-position'選項;其他88k機型
    的默認配置是 `-mno-ocs-frame-position'.

    -moptimize-arg-area

    -mno-optimize-arg-area

    控制如何在堆棧結構中存儲函數參數. `-moptimize-arg-area'節省空間,但是有可
    能宕掉某些 調試器(不是GDB). `-mno-optimize-arg-area'證實比標準選項好.默認
    情況下GCC不優化參數域.

    -mshort-data-

    num通過和r0關聯,產生較小的數據引用(data reference),這樣就可以用單指令調入
    一個數值(而不是平常的雙指令).用戶通過選項中的num控制改變哪種數據引用.例
    如,如果你指定了 `-mshort-data-512',那么受影響的數據引用是小于512字節的數
    據移動. -mshort-data-num選項對大于64K的num 無效.

    -mserialize-volatile

    -mno-serialize-volatile

    產生,或不產生代碼來保證對易變內存訪問的結果一致.

    對于常用的處理器子型號, GNU CC始終默認保證這種一致性.如何實現結果一致取決
    于處理器子型號.

    m88100處理器不對內存引用重新安排,因此訪問結果始終一致.如果使用了`-m88100
    '選項, GNU CC 不產生任何針對結果一致的特別指令.

    m88110處理器的內存引用順序并不始終符合指令請求的引用順序.特別是某條讀取指
    令可能在先前的存儲指令之前執行. 多處理器環境下,亂序訪問擾亂了易變內存訪問
    的結果一致.因此當使用`-m88000'或`-m88110' 選項時, GNU CC在適當的時候產生
    特別的指令迫使執行順序正確.

    這些用于保證一致性的額外代碼有可能影響程序的性能.如果你確認能夠安全地放棄
    這種保證,你可以使用 `-mno-serialize-volatile'選項.

    如果你使用`-m88100'選項,但是需要在m88110處理器上運行時的結果一致,你應該加
    上 `-mserialize-volatile'選項.

    -msvr4

    -msvr3

    打開(`-msvr4')或關閉(`-msvr3')和System V第四版(SVr4)相關的 編譯器擴展.效
    果如下:

    *

    輸出哪種匯編語法(你可以使用`-mversion-03.00'選項單獨選擇).

    *

    `-msvr4'使C預處理器識別`#pragma weak'指令

    *

    `-msvr4'使GCC輸出額外的聲明指令(declaration directive),用于SVr4.

    除了SVr4配置, `-msvr3'是所有m88K配置的默認選項.

    -mtrap-large-shift

    -mhandle-large-shift

    包含一些指令,用于檢測大于31位的位移(bit-shift);根據相應的選項,對這樣的位
    移發出自陷 (trap)或執行適當的處理代碼.默認情況下, GCC對大位移不做特別處理


    -muse-div-instruction

    很早以前的88K型號沒有(div)除法指令,因此默認情況下GCC避免產生這條指令.而這
    個選項告訴GCC該指令是 安全的.

    -mversion-03.00

    在DG/UX配置中存在兩種風格的SVr4.這個選項修改-msvr4 ,選擇hybrid-COFF或 re
    al-ELF風格.其他配置均忽略該選項.

    -mwarn-passed-structs

    如果某個函數把結構當做參數或結果傳遞, GCC發出警告.隨著C語言的發展,人們已
    經改變了傳遞結構的約定, 它往往導致移植問題.默認情況下, GCC不會發出警告.


    下面的選項用于IBM RS6000:

    -mfp-in-toc

    -mno-fp-in-toc

    控制是否把浮點常量放到內容表(TOC)中,內容表存放所有的全局變量和函數地址.默
    認情況下, GCC把浮點常量放到 這里;如果TOC溢出, `-mno-fp-in-toc'選項能夠減
    少TOC的大小,這樣就可以避免溢出.

    下面的`-m'選項用于IBM RT PC:

    -min-line-mul

    對于整數乘法使用嵌入代碼.這是默認選項.

    -mcall-lib-mul

    對于整數乘法使用lmul$$ .

    -mfull-fp-blocks

    生成全尺寸浮點數據塊,包括IBM建議的最少數量的活動空間(scratch space).這是
    默認選項.

    -mminimum-fp-blocks

    不要在浮點數據塊中包括額外的活動空間.這樣就產生較小但是略慢的可執行程序,
    因為活動空間必須動態分配.

    -mfp-arg-in-fpregs

    采用不兼容IBM調用約定的調用序列,通過浮點寄存器傳送浮點參數.注意,如果指定
    了這個選項, varargs.h和stdargs.h將無法支持浮點單元.

    -mfp-arg-in-gregs

    使用正常的調用約定處理浮點參數.這是默認選項.

    -mhc-struct-return

    通過內存返回大于一個字的結構,而不是通過寄存器.用于兼容MetaWare HighC (hc
    )編譯器.使用 `-fpcc-struct-return'選項可以兼容Portable C編譯器(pcc).

    -mnohc-struct-return

    如果可以,通過寄存器返回某些大于一個字的結構.這是默認選項.如果打算兼容IBM
    提供的編譯器,請使用 `-fpcc-struct-return'或`-mhc-struct-return'選項.

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>