10.146 __strexd コンパイラ組み込み関数

__strexd コンパイラ組み込み関数を使用すると、C または C++ コードの STREXD 命令を使用して、メモリへのダブルワードデータの排他的ストアを実行できます。

このコンパイラ組み込み関数の使用は廃止される予定です。

コンパイラでは、排他的モニタの状態を保持することを保証しません。コンパイラは、__ldrexd 組み込み関数のために生成された LDREXD 命令と、__strexd 組み込み関数のために生成された STREXD 命令の間に、ロード命令とストア命令を生成する可能性があります。メモリアクセスにより、排他的モニタがクリアされることがあるため、__ldrexd__strexd 組み込み関数を使用するコードは、予期しない動作をする可能性があります。LDREXDSTREXD 命令が必要である場合、組み込みアセンブリを使用することをお勧めします。

構文

int __strexd(unsigned long long val, volatile void *ptr)
各項目には以下の意味があります。
val
メモリに書き込む値を指定します。
ptr
メモリに書き込まれるデータのアドレスを指します。書き込まれるデータのサイズを指定するには、パラメータを適切な整数型にキャストします。

表 10-12 __strexd コンパイラ組み込み関数がサポートするアクセス幅

命令 ストアされたデータのサイズ ポインタ型
STREXD long long long long *

戻り値

__strexd コンパイラ組み込み関数は、以下を返します。
0
STREXD 命令が正しく実行された場合
1
STREXD 命令がロックアウトされた場合

エラー

STREXD 命令をサポートしないターゲット向けにコンパイルされる場合、コンパイラは __strexd コンパイラ組み込み関数を認識しません。使用されたソース言語に応じて、コンパイラは、警告またはエラーを生成します。
  • C コード:警告:#223-D:関数 "__strexd" が暗黙に宣言されています
  • C++ コード:エラー:#20:識別子 "__strexd" が定義されていません
__strexd コンパイラ組み込み関数は、ダブルワードデータへのアクセスのみをサポートします。サポートされないアクセス幅を指定すると、コンパイラによってエラーが生成されます。
関連する参考文書
10.123 __ldrex コンパイラ組み込み関数
10.124 __ldrexd コンパイラ組み込み関数
10.145 __strex コンパイラ組み込み関数
関連情報
STREX
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.