Everything

付録B  浮動小数点演算機能


コンパイラが浮動小数点演算命令を出力するのは,-fpuオプション指定時のみです。アセンブラで-chkfpuオプションを指定すると,浮動小数点演算命令の記述をWarningとして検出します。
B.1 タスクおよびタスク例外処理ルーチンで浮動小数点演算命令を使用する場合
システム情報(system)タスク・コンテキスト・レジスタ(context)に,“FPSW”を含む設定を行ってください。これにより,FPSWレジスタはタスク毎に独立に管理されるようになります。
タスクおよびタスク例外処理ルーチン起動時のFPSWレジスタは,使用するコンパイラ・オプションに応じた値に初期化されます。詳細は,「4.2.4 タスク内での処理」および「6.2.2 タスク例外処理ルーチン内での処理」を参照してください。
B.2 ハンドラで浮動小数点演算命令を使用する場合
ハンドラは,明示的にFPSWレジスタを保証する必要があります。
また,ハンドラ起動時のFPSWレジスタは不定です。以下のようにして,FPSWレジスタの保証と初期化を行ってください。
 #include <machine.h>    // コンパイラ提供の組み込み関数get_fpsw(), set_fpsw()を使用する
                         // ために,machine.hをインクルード
 #include "kernel.h"
 #include "kernel_id.h"
 void handler(void)
 {
     unsigned long old_fpsw;    // FPSWレジスタを退避するための変数を宣言
     old_fpsw = get_fpsw();    // FPSWレジスタを退避
     set_fpsw(0x00000100);     // 必要ならFPSWを初期化
     /* 浮動小数点演算処理 */  
     set_fpsw(old_fpsw);       // FPSWレジスタを復帰
 }