arm芯片中的浮点运算(二)

ABI即“application binary interface”,即编译器将c代码编译成汇编代码时使用的一种规则

使用规范如下:

在编译带有浮点参数的函数时,有三种可能的编译选项:-mfloat-abi=soft-mfloat-abi=softfp-mfloat-abi=hard

"soft"选项:表明不使用FPU硬件,而是使用GCC的整数算术运算来模拟浮点运算。

"softfp"选项:表明要使用FPU硬件来做浮点运算,只是,函数的参数传递到整数寄存器(r0-r3)中,然后再传递到FPU中。

"hard"选项:表明要使用FPU硬件来做浮点运算,并且,函数的参数直接传递到FPU的寄存器(s0、d0)中。

hardfp ABI和hardfloat运算不是一回事:

hardfp ABI也称为VFP模式的ABI;只是一种编译规则;而hardfloat运算则表示用FPU来做浮点运算。

soft ABI和softfp ABI这两者统称为标准模式ABI。

因此,在涉及到浮点函数调用时,

用-mfloat-abi=soft编译的app或者库,在用-mfloat-abi=softfp编译的OS中是可以跑的;

用-mfloat-abi=softfp编译的app或者库,在用-mfloat-abi=soft编译的OS中,如果SoC中没有FPU,那么是不能跑的。

而-mfloat-abi=softfp/soft与-mfloat-abi=hard,是互不兼容的。

注意,Code sourcery 2007/2008均不支持-mfloat-abi=hard,从Code Sourcery 2009q1才开始支持-mfloat-abi=hard,即arm-none-linux-gnueabi-gcc-4.3.2以后的版本支持-mfloat-abi=hard

人生没有停靠站,自我本身永远是一个出发点。

arm芯片中的浮点运算(二)

相关文章:

你感兴趣的文章:

标签云: