我的CPU具有以下CPU功能
cat /proc/cpuinfo
Processor : ARMv7 Processor rev 4 (v7l)
processor : 0
BogoMIPS : 1192.96
processor : 1
BogoMIPS : 1197.05
Features : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xc07
CPU revision : 4
Hardware : sun7i
Revision : 0000
gcc设置
-march=armv7ve -mfloat-abi=hard -mfpu=vfpv3-d16 -meabi=5
的选项
cat main.c
#include <stdio.h>
void main()
{
printf("Hello World!\n");
}
用
编译gcc -march=native -mtune=native -Q -v main.c
似乎是CPU功能支持的neon-vfpv4
是否优于gcc设置的vfpv3-d16
?
我对vfpv3-d16
的内容neon-vfpv4
只有{{1}},而{{1}}上没有任何内容。
我正在使用gcc 4.9.1
答案 0 :(得分:5)
-march
和-mtune
(或-mcpu
作为两者的简写)仅控制用于指令选择和调度的CPU选项。例如,使用基于GCC 4.8的交叉工具链,当我这样做时:
arm-linux-gnueabihf-gcc -mcpu=arm250 -v -c test.c
我明白了:
...
COLLECT_GCC_OPTIONS='-mcpu=arm250' '-v' '-c' '-mfloat-abi=hard'
'-mfpu=vfpv3-d16' '-mthumb' '-mtls-dialect=gnu'
...
这显然是无稽之谈 - ARM250以 long 方式先于VFP(甚至是Thumb) - 因为对于任何未指定的选项,它只是通过配置为默认值的任何内容: / p>
...
Configured with:
... --with-arch=armv7-a --with-tune=cortex-a9 --with-fpu=vfpv3-d16 ...
... --with-mode=thumb --with-float=hard
您的Cortex-A7确实支持完整的VFPv4和NEON,因此传递-mfpu=neon-vfpv4
以覆盖默认值是正确的做法。不幸的是,它似乎不是一个等价的-mfpu=native
选项(至少记录在案 - 我没有方便的原生工具链来检查)。