0
我有一個Cortex A15的預編譯的ARM工具鏈。我想檢查它是否生成正確的VFPv4指令。任何機構有任何想法?如何驗證ARM工具鏈中的VFPv4功能
我有一個Cortex A15的預編譯的ARM工具鏈。我想檢查它是否生成正確的VFPv4指令。任何機構有任何想法?如何驗證ARM工具鏈中的VFPv4功能
我們可以看看它在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或想到任何其他方式。
我會說你提出的建議足以驗證編譯器,因爲只需接受-mfpu = neon-vfpv4的gcc二進制就意味着支持就在那裏。編譯器是否真的使用附加指令完全是另一回事。 – unixsmurf
[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編譯。遊戲渲染和火箭控制有不同的要求。 –
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」。 –