非主流的代碼優(yōu)化方案,請(qǐng)指導(dǎo)

我使用CH32V303,并且需要使用浮點(diǎn)運(yùn)算。所以我編譯時(shí)使用 -march=rv32imafc -mabi=ilp32f 來(lái)生成代碼。

然而我發(fā)現(xiàn)這會(huì)在中斷內(nèi)生成保存/恢復(fù)浮點(diǎn)寄存器的代碼,不論是時(shí)間還是空間,我都不愉快。


一開(kāi)始,我重寫了高頻率發(fā)生的中斷,拋開(kāi)外設(shè)庫(kù),直接操作寄存器,以避免因?yàn)檎{(diào)用函數(shù)而產(chǎn)生不必要的保存現(xiàn)場(chǎng)的代碼。

但這樣其他中斷依然會(huì)有大量不必要的保存/恢復(fù)浮點(diǎn)寄存器的代碼。


所以,我后來(lái)的做法是,代碼默認(rèn)使用 -march=rv32imac -mabi=ilp32 來(lái)編譯,但涉及到浮點(diǎn)運(yùn)算的那部分C程序使用了 -march=rv32imafc -mabi=ilp32。畢竟,全局放棄使用硬件浮點(diǎn),對(duì)我而言還是不可接受的。


那么,這種非主流的優(yōu)化會(huì)有什么問(wèn)題么?

您好,應(yīng)該是沒(méi)問(wèn)題的


注意到 arm 的實(shí)現(xiàn)方式:+nofp

例如,https://community.arm.com/support-forums/f/compilers-and-libraries-forum/8930/how-to-disable-floating-point-instruction-generation-with-aarch64-gcc-compiler 提到的,

nofp means no floating point at all, it is used to check floating point isn't used by mistake in some place it might cause problems like a device driver.


在 device driver 中不使用浮點(diǎn),所以也不無(wú)需保存浮點(diǎn)寄存器。上面我提到的方式,會(huì)導(dǎo)致 gcc 的 multilib找不到而只適配最基礎(chǔ)的默認(rèn)運(yùn)行庫(kù),c擴(kuò)展、xw擴(kuò)展,全用不上了。


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频