預設情況下,使用自訂指令時,浮點常數會編譯為單一精准度浮點運算在硬體中實做。以下的解決方法將迫使浮點常數編譯,因為軟體中實作雙重精確度和雙重精確度浮點運算。
您可以使用下列任一個解決方法:
選項 1 - 將 postfix「L」加到雙精准浮點常數,以修改軟體,確保常數不會轉換成單一精確度。
下表顯示範例代碼與浮點自訂指令硬體使用、精確度,以及實作是否在硬體或軟體中。
範例代碼 | FP CI 使用量 | 精度 | 實現 |
b= a * 4.67 | 是的 | 單 | 硬體 |
b = * 4.67 | 不 | 雙 | 軟體 |
b = * 4.67f | 是的 | 單 | 硬體 |
b = * 4.67f | 不 | 單 | 軟體 |
b = * 4.67L | 不在乎* | 雙 | 軟體 |
選項 2 -在 public.mk 中,手動移除 -mcustom-fpu-config 旗標並替換為個別編譯標記,但省略 -fsingle-precision-constant 旗標。
「-mcustom-fpu-config=60-1」到「-mcustom-fmuls=252 –mcustom-fadds=253 –mcustom-fsubs=254」或
「-mcustom-fpu-config=60-2」到「-mcustom-fmuls=252 –mcustom-fadds=253 –mcustom-fsubs=254 –mcustom-divs=255」
請注意,60-1 和 60-2 的區別在於 60-1 沒有 –mcustom-divs 旗標。
如需進一步詳細資訊,請參閱附錄 D HTTP://www.altera.com/literature/ug/ug_nios2_custom_instruction.pdf