• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            chaosuper85

            C++博客 首頁 新隨筆 聯系 聚合 管理
              118 Posts :: 0 Stories :: 3 Comments :: 0 Trackbacks

            GCC 4

            Section: GNU Tools (1)
            Updated: 2003/12/05

            機器相關選項(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,也可以在6803068040上較有效地運行.

             

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

             

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

             

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

             

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

             

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

             

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

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

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

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

            6801068020處理器支持rtd指令,但是68000不支持.

             

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

            -munix
            禁止輸出某些跳轉指令(aobleq等等), VAXUNIX匯編器無法跨越長范圍(long ranges) 進行處理.

             

            -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, 1000 2000系列使用這種芯片.同時該選項啟用完整的SPARC v8指令集.

             

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

            -mc1
            輸出C1的目標碼.當編譯器對C1配置時,這是默認選項.
            -mc2
            輸出C2的目標碼.當編譯器對C2配置時,這是默認選項.
            -margcount
            在每個參數列表的前面放置一個參數計數字(argument count word).某些不可移植的ConvexVax 程序需要這個參數計數字. (調試器不需要他,除非函數帶有變長參數列表;這個信息存放在符號表中.)

             

            -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, names.

             

            -muser-registers
            使用普通全局寄存器集gr96-gr127.這是默認選項.
            -mstack-check
            在每次堆棧調整后插入一條__msp_check調用.這個選項常用于內核代碼.

             

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

            -m88000
            生成的目標碼可以在m88100m88110上正常工作.
            -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 Object Compatibility Standard, ``OCS'',對此信息做了說明. GDB不需要這些額外信息. DG/UX, SVr4,Delta 88 SVr3.2的默認配置是包含調試信息,其他88k機型的默認配置是忽略這個信息.
            -mocs-frame-position
            -mno-ocs-frame-position
            強制(或不要求)把寄存器值存儲到棧架結構中的指定位置(OCS的說明). DG/UX, Delta88 SVr3.2BCS的默認配置使用`-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選項對大于64Knum 無效.

             

            -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-COFFreal-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.hstdargs.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'選項.

             

            下面的`-m'選項用于MIPS家族的計算機:

            -mcpu=cpu-type
            生成指令的時候,假設默認的機器類型是cpu-type .默認情況下的cpu-typedefault, GCC將選取任何機型上都是最長周期時間的指令,這樣才能使代碼在所有的MIPS處理器上以合理 的速度運行. cpu-type的其他選擇是r2000, r3000, r4000,r6000.雖然選定某個cpu-type, GCC將針對選定的芯片安排對應的工作,但是如果 不指定?? -mips2-mips3選項,編譯器不會輸出任何不符合MIPS ISA (instruction set architecture)一級的代碼.

             

            -mips2
            輸出MIPS ISA二級指令(可能的擴展,如平方根指令). -mcpu=r4000-mcpu=r6000 選項必須和-mips2聯用.

             

            -mips3
            輸出MIPS ISA三級指令(64位指令). -mcpu=r4000選項必須和-mips2聯用. (譯注:疑為-mips3)

             

            -mint64
            -mlong64
            -mlonglong128
            這些選項目前不起作用.

             

            -mmips-as
            產生用于MIPS匯編器的代碼,同時使用mips-tfile添加普通的調試信息.對于大多數平臺這是 默認選項,除了OSF/1參考平臺,它使用OSF/rose目標格式.如果打開了任一個-ggdb, -gstabs,-gstabs+選項開關, mips-tfile程序就把stab封裝在MIPS ECOFF里面.

             

            -mgas
            產生用于GNU匯編器的代碼.OSF/1參考平臺上這是默認選項,它使用OSF/rose目標格式.

             

            -mrnames
            -mno-rnames
            -mrnames開關選項告訴輸出代碼使用MIPS軟件名稱說明寄存器,而不是硬件名稱(就是說,a0代替$4). GNU匯編器不支持-mrnames選項,MIPS匯編器則運行MIPS C預處理器處理源文件. -mno-rnames是默認選項.

             

            -mgpopt
            -mno-gpopt
            -mgpopt開關選項要求在正文段中把所有的數據聲明寫到指令前面,使各種MIPS匯編器對短類型全局 或靜態數據項(short global or static data items)輸出單字內存訪問而不是雙字內存訪問.當打開編譯優化 時,這是默認功能.

             

            -mstats
            -mno-stats
            每次處理完非嵌入函數(non-inline function), -mstats開關選項使編譯器向標準錯誤文件 輸出一行關于程序的統計資料(保存的寄存器數目,堆棧大小,等等).

             

            -mmemcpy
            -mno-memcpy
            -mmemcpy開關選項使所有的塊移動操作調用適當的string函數(memcpybcopy),而不是生成嵌入代碼.

             

            -mmips-tfile
            -mno-mips-tfile
            MIPS匯編器生成mips-tfile文件(用于幫助調試), -mno-mips-tfile 開關選項阻止編譯器使用mips-tfile后期處理(postprocess)目標文件.不運行 mips-tfile就沒有調試器關注的局部變量.另外, stage2stage3目標文件將把 臨時文件名傳遞給匯編器,嵌在目標文件中,這意味著不比較目標文件是否相同.

             

            -msoft-float
            輸出包含浮點庫調用. 警告: 所需庫不是GNU CC的一部分.一般說來使用該機型本地C編譯器的相應部件, 但是不能直接用于交叉編譯,你必須自己安排,提供交叉編譯適用的庫函數.

             

            -mhard-float
            輸出包含浮點指令.如果編譯器沒有被改動,這就是默認選項.

             

            -mfp64
            編譯器認為狀態字的FR置位(on),也就是說存在32 64-bit浮點寄存器,而不是32 32-bit 浮點寄存器.同時必須打開-mcpu=r4000-mips3開關.

             

            -mfp32
            認為存在32 32-bit浮點寄存器.這是默認選項.

             

            -mabicalls

            -mno-abicalls
            輸出(或不輸出) .abicalls, .cpload,.cprestore偽指令,某些 System V.4版本用于位置無關代碼.

             

            -mhalf-pic
            -mno-half-pic
            -mhalf-pic開關選項要求把外部引用的指針放到數據段,并且載入內存,而不放到正文段.該選項目前 不起作用.

             

            -G num
            把小于等于num字節的全局或靜態數據放到小的數據段或bss,而不是普通的數據段或bss. 這樣匯編器可以輸出基于全局指針(gp$28),的單字內存訪問指令而非普通的雙字指令.默認情況下, MIPS匯編器時num8,GNU匯編器則為0.另外, -Gnum選項也被傳遞 給匯編器和連接器.所有的模塊必須在相同的-Gnum值下編譯.

             

            -nocpp
            匯編用戶匯編文件(帶有`.s'后綴),告訴MIPS匯編器不要運行預處理器.

             

            下面的`-m'選項用于Intel 80386族計算機: -m486

            -mno-486
            控制是否生成對486優化的代碼.

             

            -msoft-float
            輸出包含浮點庫調用. 警告: 所需庫不是GNU CC的一部分.一般說來使用該機型本地C編譯器的相應部件, 但是不能直接用于交叉編譯,你必須自己安排,提供交叉編譯適用的庫函數.

            在函數把浮點返回值放在80387寄存器棧的機器上,即使設置了`-msoft-float'選項,也可能會發出 一些浮點操作碼.

             

            -mno-fp-ret-in-387
            不用FPU寄存器返回函數值.

            通常函數調用約定把floatdouble的返回值放在FPU寄存器中,即使不存在FPU. 這種作法的理念是操作系統應該仿真出FPU.

            `-mno-fp-ret-in-387'選項使浮點值通過普通的CPU寄存器返回.

            posted on 2009-08-03 14:31 chaosuper 閱讀(290) 評論(0)  編輯 收藏 引用
            欧美精品久久久久久久自慰| 久久久女人与动物群交毛片 | 狠狠色伊人久久精品综合网| 欧美性猛交xxxx免费看久久久| 久久精品人妻中文系列| 99精品久久久久中文字幕| 久久久久国产一区二区三区| 伊人久久大香线蕉AV一区二区| 久久久老熟女一区二区三区| 色婷婷综合久久久久中文字幕| 99久久国产热无码精品免费| 欧美亚洲另类久久综合婷婷| 国产午夜久久影院| 国产精品久久久亚洲| 久久丫忘忧草产品| 久久久久九国产精品| 久久国产精品无码网站| 久久久久久a亚洲欧洲aⅴ| 久久综合给合久久狠狠狠97色69| 久久婷婷色综合一区二区| 亚洲综合久久夜AV | 中文字幕精品无码久久久久久3D日动漫| 久久精品无码一区二区三区免费| 久久久久国产精品嫩草影院| 久久精品亚洲精品国产欧美| 久久久久久亚洲精品无码| 久久婷婷五月综合成人D啪| 久久综合久久综合亚洲| 狠狠色综合网站久久久久久久高清 | 久久亚洲视频| 久久亚洲AV无码精品色午夜 | 久久精品?ⅴ无码中文字幕| 久久久久无码中| 亚洲日本va中文字幕久久| 青青草国产精品久久久久| 亚洲国产成人精品久久久国产成人一区二区三区综 | 久久久久国产精品| 久久久精品国产免大香伊| 99久久亚洲综合精品成人| 亚洲中文字幕无码久久2017| 99久久精品国产一区二区蜜芽|