我使用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)題么?