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 リファレンスhereから 1 行を引用します。

ターゲットがデータのプリフェッチをサポートしていない場合、副作用が含まれていればアドレス式が評価されますが、他のコードは生成されず、GCC は警告を発行しません。

最後の情報は、クロス コンパイラが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 に答える