3.3 fplib ルーチンの呼び出し

浮動小数点ルーチンには、__aeabi_dadd(2 つの double の加算)や __aeabi_fdiv(2 つの float の除算)などの名前が付けられています。これらのルーチンは、ユーザプログラムで直接呼び出せます。

コプロセッサが存在する環境でもこれらのルーチンを使用できますが、適切なコプロセッサ命令の機能を実現するのみのため、通常は、ルーチンの中ではいくつかの命令しかありません。
fplib ルーチンはすべてソフトウェア浮動小数点を呼び出す標準仕様に基づいて呼び出されます。つまり、浮動小数点引数の受け渡しには整数レジスタが使用されます。それに対して、コプロセッサを使用することを前提としてプログラムがコンパイルされる場合、浮動小数点データがコプロセッサの浮動小数点レジスタに渡されます。
このため、例えば __aeabi_dadd では、レジスタ r0r1 double と、レジスタ r2r3 double が加算され、その結果が r0r1 に返されます。

double がレジスタ r0 および r1 に保持されるとき、 double の上位 32 ビットを保持するレジスタは、プログラムがリトルエンディアンとビッグエンディアンのいずれを使用するかで異なります。
ソフトウェア浮動小数点ライブラリルーチンは、次のヘッダファイルのいずれかで宣言されています。
  • C99 機能を実装する少数の fplib ルーチンは、標準のヘッダファイル math.h 内で宣言されています。
  • それ以外の fplib ルーチンは、ヘッダファイル rt_fp.h 内で宣言されています。このファイルをインクルードすると、fplib のルーチンを直接呼び出せます。
アセンブラから関数を呼び出すには、ソフトウェア浮動小数点関数 fn を呼び出します。例えば、nextafter() 関数を呼び出すには、以下のように記述します。
IMPORT nextafter BL nextafter
関連する概念
3.2 ソフトウェア浮動小数点ライブラリ fplib
関連する参考文書
3.4 特定形式の数値に対する fplib 算術演算
3.5 floats、long longs、doubles、ints の間の fplib 変換
3.6 float と double の間の fplib 比較
3.7 fplib C99 関数
関連情報
『Application Binary Interface (ABI) for the ARM Architecture』
浮動小数点計算と浮動小数点リンケージに対するコンパイラサポート
非機密扱いPDF file icon PDF 版ARM DUI0475KJ
Copyright © 2010-2014 ARM.All rights reserved.