参考连接:ARM 浮点运算,软浮点,硬浮点
浮点数据的运算在ARM 中有软浮点和硬浮点两种。
硬浮点:
编译器将代码直接编译成 硬件浮点协处理器(浮点运算单元FPU)能够识别的指令,这些指令在执行的时候CPU会直接把它转给协处理器执行。浮点协处理器通常有一套额外的寄存器用来完成浮点参数的传递和运算 ,使用实际的硬件浮点协处理器会使CPU 性能进一步提升。
软浮点:
编译器把浮点运算 转换成浮点运算的函数调用和库函数调用。没有FPU 的指令调用,也没有浮点寄存器传递参数。浮点数据的传递也是通过ARM 寄存器或者堆栈完成的。
现在的Linux系统默认编译选择使用hard-float,如果系统没有任何浮点处理器单元,这就会产生非法指令和异常。因而一般的系统镜像都采用软浮点以兼容没有VFP的处理器。
32 位交叉编译器 arm-linux-gnueabi- 对于浮点操作采用的是 软浮点
可以使用 -v 参数查看 编译器的默认命令
32 位交叉编译还有一个 arm-linux-gnueabihf-gcc 该编译器对于浮点操作采用的是 硬浮点 也可以 通过-v 查看
COLLECT_GCC_OPTIONS='-v' '-mf