ARM Cortex-A8:如何同时利用NEON和vfpv3?

8

我使用Cortex-A8处理器,不知道如何使用-mfpu标志。

Cortex-A8上有vfpv3和neon协处理器。之前我不知道如何使用neon,所以我只使用了

gcc -marm -mfloat-abi=softfp -mfpu=vfpv3

现在我已经了解了SIMD处理器的运行方式,并使用NEON内部函数编写了某些代码。要使用neon协处理器,现在我的-mfpu标志必须更改为-mfpu=neon,因此我的编译器命令行如下:

gcc -marm -mfloat-abi=softfp -mfpu=neon

那么这是否意味着我不再使用vfpv3?我有很多代码没有使用NEON,这些部分是否仍然使用vfpv3?

如果仍然同时使用neon和vfpv3,那么我就没有问题,但如果只使用其中一个,我该怎样同时使用两者?

1个回答

11

NEON意味着同时支持传统的VFP。 VFP可用于“普通”(非向量)浮点运算。此外,NEON不支持双精度FP,因此只能使用VFP指令。
您可以在gcc的命令行中添加-S,并检查汇编代码。以V开头的指令(例如vld1.32,vmla.f32)是NEON指令,而以F开头的指令(fldd,fmacd)是VFP指令。(虽然ARM文档现在更喜欢为VFP指令使用V前缀,但GCC并不这样做。)


Igor,我只有单精度浮点数值。事实上,我看到了很多F指令(例如fadds、fsitos),所以我认为编译器仍在发出VFP指令。 - HaggarTheHorrible
一个不相关的问题,你知道双发射处理器是什么意思吗?Cortex-A8是双发射处理器,这是什么意思?你能给我指一些链接吗?我的搜索结果不太理想。 - HaggarTheHorrible
Vikram,Coretex A8是一种双发射乱序处理器。这意味着它可以在一个时钟周期内执行一些或全部以下操作:1)解码并将两个指令排队以进行乱序执行,2)每个时钟周期执行两个排队的指令,和/或3)每个时钟周期可以撤销两个此类结果。换句话说,在最佳条件下,它可以持续执行每秒两个指令。最佳条件仅在没有缓存未命中、分支预测错误等情况下出现。 - Jan Gray
谢谢Jan。我得到了一些指向TI网站的维基链接(http://processors.wiki.ti.com/index.php/Cortex-A8_Features)。这是一个非常好的链接。 - HaggarTheHorrible
本来想要一个Sabre-Lite,使用Cortex A9开发板。我猜-mfpu=neon是正确的选择,因为它可以同时使用两个协处理器。谢谢。 - nass

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接