Calling fplib routines

Floating-point routines have names like __aeabi_dadd (add two doubles) and __aeabi_fdiv (divide two floats). User programs can call these routines directly. Even in environments with a coprocessor, the routines are provided. They are typically only a few instructions long because all they do is execute the appropriate coprocessor instruction.

All the fplib routines are called using a software floating-point variant of the calling standard. This means that floating-point arguments are passed and returned in integer registers. By contrast, if the program is compiled for a coprocessor, floating-point data is passed in its floating-point registers.

So, for example, __aeabi_dadd takes a double in registers r0 and r1, and another double in registers r2 and r3, and returns the sum in r0 and r1.


For a double in registers r0 and r1, the register that holds the high 32 bits of the double depends on whether your program is little-endian or big-endian.

Except for the software floating-point library routines that implement C99 functionality, the fplib routines are declared in the header file rt_fp.h. You can include this file if you want to call an fplib routine directly. Software floating-point library routines that implement C99 functionality are declared in the standard header file math.h.

To call a function from assembler, the software floating-point function is named __softfp_fn. For example, to call the cos() function, implement the following code:

IMPORT __softfp_cos
BL __softfp_cos

Show/hideSee also

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0475C