国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

查看: 2762|回復(fù): 0
打印 上一主題 下一主題

ARM GCC浮點相關(guān)總結(jié)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2017-4-7 11:07:48 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
1、名字解釋:

ABI,application binary interface (ABI),應(yīng)用程序二進制接口。

2、編譯版本問題:
  GCC 4.0 為分界線
  4.0版本以下,由于采用OABI接口,其對浮點的支持不太好
  4.0版本以上,采用了新的EABI接口,其對軟浮點和硬浮點的支持都比較好。

考慮在4.0版本以下時,其支持的ARM內(nèi)核大多數(shù)沒有硬浮點,所以可以分析資料比較少,
現(xiàn)在重點關(guān)注4.0版本以上。以下所述都是針對4.0版本以上的。


3、編譯器相關(guān)的參數(shù):
  -mfloat-abi=soft    使用這個參數(shù)時,其將調(diào)用軟浮點庫(softfloat lib)來支持對浮點的運算,GCC編譯器已經(jīng)有這個庫了,一般在libgcc里面。這時根本不會使用任何浮點指令,而是采用常用的指令來模擬浮點運算。 但使用的ARM芯片不支持硬浮點時,可以考慮使用這個參數(shù)。在使用這個參數(shù)時,連接時一般會出現(xiàn)下面的提示:
   undefined reference to `__aeabi_fdiv'
  或者類似的提示,主要因為一般情況下連接器沒有去主動尋找軟浮點庫,這時使用將libgcc庫加入即可。

  -mfloat-abi=softfp
  -mfloat-abi=hard
  這兩個參數(shù)都用來產(chǎn)生硬浮點指令,至于產(chǎn)生哪里類型的硬浮點指令,需要由-mfpu=xxx參數(shù)來指令。這兩個參數(shù)不同的地方是:
         -mfloat-abi=softfp生成的代碼采用兼容軟浮點調(diào)用接口(即使用-mfloat-abi=soft時的調(diào)用接口),這樣帶來的好處是:兼 容性和靈活性。庫可以采用-mfloat-abi=soft編譯,而關(guān)鍵的應(yīng)用程序可以采用-mfloat-abi=softfp來編譯。特別是在庫由第 三方發(fā)布的情況下。
         -mfloat-abi=hard生成的代碼采用硬浮點(FPU)調(diào)用接口。這樣要求所有庫和應(yīng)用程序必須采用這同一個參數(shù)來編譯,否則連接時會出現(xiàn)接口不兼容錯誤。
  
  
  -mfpu=vfp
  -mfpu=fpa
  ...
  前面已經(jīng)講述了,-mfpu參數(shù)就是用來指定要產(chǎn)生哪種硬浮點指令。常見的有vfp,fpa等。


4、編譯器使用時要注意的地方:
  a.確認(rèn)編譯器默認(rèn)是使用哪種參數(shù)來處理浮點操作的。寫一個簡單的浮點數(shù)程序:
  #include
int main(void)
{
    double d1 = 10.3;
    double d2 = 2.0;
   
    double dret = d1/d2;
    dret++;
   
    printf("result :%f",dret);
   
    return 0;
}
     
然后使用
      arm-linux-gcc -c main.c -o main.o
    再使用
      arm-linux-objdump -d main.o
     然后觀察產(chǎn)生的指令,從而確定默認(rèn)使用的是軟浮點還是硬浮點。(確認(rèn)的過程,看個人。晃一眼,里面如果有不熟悉指令,那可能就是硬浮點指令了)

  b.確認(rèn)編譯器所帶的庫使用哪種參數(shù)來編譯的。
  c.確認(rèn)所使用的芯片是否支持硬浮點,如果支持,是哪種類型的浮點指令。如果1,2與使用的芯片相沖突,這時就要考慮另尋編譯器了。

這三點確認(rèn)以后,我們在寫自己的應(yīng)用程序時,就會知道該怎樣使用這些參數(shù)了。


5、Linux相關(guān)問題:

這里涉及兩個問題:

問題1:使用的ARM芯片不支持硬浮點
   在配置ARM Linux內(nèi)核時,應(yīng)該都會看到這樣的配置:
    menu "Floating point emulation"
    comment "At least one emulation must be selected"
    config FPE_NWFPE
        ...
這個是用來配置在內(nèi)核里面模擬浮點處理器。

這個配置有什么作用呢?估計很少有人能夠知道。其實它是這樣的:
當(dāng)使用的ARM芯片不支持硬浮點,而又采用了-mfpu=fpa -mfloat-abi=softfp/hard來編譯應(yīng)用程序。現(xiàn)在應(yīng)該知道,采用這樣的參數(shù)是要參數(shù)fpa硬浮點指令。但是使用的ARM芯片不支持硬 浮點,這時這個配置就其作用了。因為使用了fpa硬浮點指令,但使用的ARM芯片不支持硬浮點,這樣當(dāng)程序運行到fpa硬浮點指令,會出現(xiàn)指令異常,便會 陷入到內(nèi)核里,這時這個模擬浮點處理器就來模擬這些浮點指令。現(xiàn)在應(yīng)該清楚了,其作用了吧。但是現(xiàn)在有了更好的辦法,前面已經(jīng)講過了,采用 -mfloat-abi=soft參數(shù)來編譯應(yīng)用程序,這樣效率會快得多。想想從用戶態(tài)切換到內(nèi)核態(tài),以及由此產(chǎn)生的cache和TLB表的損失。所以可 以考慮將這個配置拋棄了。


您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 好吊788gaoco | 日本最新新片在线观看免费 | www·麻豆 | 蜜桃精品视频在线 | 日日夜夜综合 | 亚洲天天操 | 精品国产中文一级毛片在线看 | 999国产精品999久久久久久 | 99热在| 性视频福利在线看 | 亚洲一区视频在线 | 岛国大片免费 | 天堂日本 | 分享一个无毒不卡的网站 | 91啦在线播放 | 久久一级片 | 国产三级自拍 | 睡美人免费观看完整版韩国 | 羞羞视频免费网站在线 | 最新更新国内自拍视频 | www.av色| 亚洲精品视频在线看 | 亚洲成人精品 | 请输入搜索词:www免费 | 在线欧美日韩精品一区二区 | 中国美女大战黑人国产 | 欧美高清成人 | 丁香婷婷久久 | 欧美一区二区三区影院 | 国产三级在线观看视频 | 一区二区三区中文国产亚洲 | 日韩欧美在| 久久伊人最新 | 福利久久 | 自拍偷窥| 四虎成人精品 | 精品视频一区二区三区四区 | 国产在亚洲线视频观看 | 国产大片线上免费看 | 日本在线观看免费高清 | 99cao|