2012-10-09 31 views

回答

3

我們可以看看它在gcc release log其中規定

... 
GCC now supports VFPv4-based FPUs and FPUs with single-precision-only VFP. 
... 

我們也可以手動驗證。根據ARM體系結構手冊VFPv4至少添加Vector Fused Multiply Accumulate/Subtract

void test_vfp4() { 
    asm("VFMA.F32 q1, q2, q3"); 
} 

-mfpu=neon-vfpv4開關編譯這個(否則我的工具鏈說Error: selected processor does not support ARM mode 'vfma.f32 q1,q2,q3'

gcc -mfpu=neon-vfpv4 -O2 -marm -c vfpv4.c 

和傾倒的二進制文件與

arm-linux-gnueabihf-objdump -S vfpv4.o 

應列出以下

00000000 <test_vfp4>: 
    0: f2042c56 vfma.f32 q1, q2, q3 
    4: e12fff1e bx lr 

但是我不知道如何在C級別使用它,因爲我找不到這些融合指令的任何intrinsic listed或想到任何其他方式。

+2

我會說你提出的建議足以驗證編譯器,因爲只需接受-mfpu = neon-vfpv4的gcc二進制就意味着支持就在那裏。編譯器是否真的使用附加指令完全是另一回事。 – unixsmurf

+1

[vfp.md](http://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/config/arm/vfp.md;hb=HEAD#l892)描述爲[arm.md](http://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/config/arm/arm.md;hb=HEAD#l1585) 'mla'整數版本。我見過gcc使用'mla'版本。編譯器可能會使用該指令。然而,由於'C'迂迴使用IEEE浮點數之間的不匹配通常很困難。即,解規範和其他問題通常會阻止使用。如果你想要,我會用-ffast-math編譯。遊戲渲染和火箭控制有不同的要求。 –

+0

Richard Earnshaw撰寫的[優秀博客文章](http://community.arm.com/groups/tools/blog/2013/04/15/arm-cortex-a-processors-and-gcc-command-lines)用於Cortex CPU的FPU類型。使用「-Ofast」或「-O3」和「-ffast-math」。 –