0

以下代码行已arm-linux-gnueabi-g++-4.7在 Ubuntu 主机上使用交叉编译。prfm应该为特定行生成指令,但事实并非如此。

__builtin_prefetch(&some_variable,0,3); 

编译命令是:

arm-linux-gnueabi-g++-4.7 -O0 -S -std=c++11 main.cpp -D some_definition 
cat main.s | grep pr
//Returns null (main.s is all lower case)

在此处引用与该问题相关的gcc 参考中的一行:

如果目标不支持数据预取,如果地址表达式包含副作用但不生成其他代码并且 GCC 不发出警告,则计算地址表达式。

最后一条信息是交叉编译器是通过 using 安装的apt-get install,而不是从头开始安装的。

问题来了:

如何简单地将数据预取支持添加到arm-linux-gnueabi-g++-4.7交叉编译器的目标?

提前致谢

4

1 回答 1

2

正如@Notlikethat 所建议的那样,编译-march=armv7-a解决了这个问题。现在汇编输出中有一条 pld 指令。

$ arm-linux-gnueabi-g++-4.7 -g -O3 -std=c++11 -static -S -march=armv7-a main.cpp -D some_definition
$ cat main.s | grep pld
pld [r0, #0]
于 2016-05-11T09:44:55.000 回答