以下代码行已在Ubuntu主机上使用arm-linux-gnueabi-g++-4.7
进行了交叉编译。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不会发出警告。
最后一条信息是,交叉编译器是使用apt-get install
安装的,而不是从头开始的。
问题来了:
如何简单地将数据预取支持添加到arm-linux-gnueabi-g++-4.7
交叉编译器的目标?
提前感谢
正如@Notlike所建议的那样,使用-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]