0

64ビットアトミックコードの記述方法については、オンラインでいくつかの資料があります。次に例を示します。

64ビット書き込みがアトミックであることを保証するにはどうすればよいですか?

..しかし、その道を進む前に、Android NDK / ARM固有のソリューションがある場合は、それを使用したいと思います。

32ビットと64ビットのアトミック操作を必要とするC++エンジンを移植しています。GCCの組み込み__sync_*関数を調べて実装しましたが、リンクするときに、64ビット演算で次のようなエラーが発生しました。

error: undefined reference to '__sync_fetch_and_or_8'
error: undefined reference to '__sync_lock_test_and_set_8'
error: undefined reference to '__sync_fetch_and_and_8'
error: undefined reference to '__sync_fetch_and_add_8'
error: undefined reference to '__sync_val_compare_and_swap_8'

私が読んだarmeabi-v7aをターゲットにしていますが、64ビットアトミック(ldrexd / strexd)のアセンブリ命令がいくつかあるので、GCC組み込みアトミックを介してそれらにアクセスする方法はありますか?そうでない場合、他のオプションは何ですか?

  • ミューテックスを使用して、各64ビット操作を保護します
  • ldrexd/strexdを利用するアセンブリコードを記述します
  • スーパーシークレットフラグをNDKツールチェーンに渡して64ビット組み込み関数を有効にしますか?
  • ARMv8を待ちますか?:)

ありがとう!

4

1 に答える 1

4

私の質問以来、組み込みの 64 ビット アトミックをサポートする NDK r8d がリリースされました。

http://developer.android.com/tools/sdk/ndk/index.html

ARM 用の 64 ビット組み込みアトミック関数を GCC 4.6 にバックポートしました。

于 2013-01-02T19:51:48.160 に答える