4.1.1. 浮点库 fplib 的特性

浮点例程具有类似于 __aeabi_dadd(将两个 double 相加)和 __aeabi_fdiv(将两个 float 相除)的名称。 用户程序可直接调用这些例程。 即使在使用协处理器的环境中,也会提供这些例程。 不过,这些例程通常只有几个指令长(因为它们仅限执行相应的协处理器指令)。

所有 fplib 例程都是使用调用标准的软件浮点变体调用的。 这意味着,在整数寄存器中传递并返回浮点参数。 与此相反,如果为协处理器编译程序,则会在浮点寄存器中传递浮点数据。

因此,举例来说,__aeabi_daddr0r1 寄存器中提取 double,在 r2r3 寄存器中提取另一个 double,并在 r0r1 中返回两者的和。

Note

对于 r0r1 寄存器中的 double,保存 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 0349AC
Non-Confidential