4.1.1. 浮動小数点ライブラリ fplib の機能

浮動小数点ルーチンには、__aeabi_dadd (2 つの double の加算)や __aeabi_fdiv (2 つの float の除算)などの名前が付けられています。 これらのルーチンは、ユーザプログラムで直接呼び出せます。 コプロセッサが存在する環境でもこれらのルーチンを使用できますが、 通常は、いくつかの命令の長さしかありません(ルーチンによって行われるのは適切なコプロセッサ命令の実行のみのため)。

fplib ルーチンはすべてソフトウェア浮動小数点を呼び出す標準仕様に基づいて呼び出されます。 つまり、浮動小数点引数の受け渡しには整数レジスタが使用されます。 それに対して、コプロセッサを使用することを前提としてプログラムがコンパイルされる場合、浮動小数点データの受け渡しには浮動小数点レジスタが使用されます。

このため、例えば __aeabi_dadd では、レジスタ r0r1double と、レジスタ r2r3double が加算され、その結果が r0r1 の合計に返されます。

Note

double がレジスタ r0 および r1 に保持されるとき、double の上位 32 ビットを保持するレジスタは、プログラムがリトルエンディアンとビッグエンディアンのいずれを使用するかで異なります。

fplib に含まれているすべてのルーチン(Table 4.5 に示すものを除く)が、ヘッダファイル rt_fp.h 内で宣言されています。 このファイルをインクルードすると、fplib のルーチンを直接呼び出せます。 Table 4.5 で示したルーチンは、標準のヘッダファイル math.h で宣言されます。

アセンブラから関数を呼び出すためには、ソフトウェア浮動小数点関数 __softfp_fn を呼び出します。 例えば、cos() 関数を呼び出すには、以下のように記述します。

IMPORT __softfp_cos
BL __softfp_cos
Copyright © 2007 ARM Limited. All rights reserved.ARM DUI 0349AJ
Non-Confidential