10.124 __ldrexd コンパイラ組み込み関数

__ldrexd 組み込み関数を使用すると、C または C++ コードで LDREXD 命令を使用してメモリからダブルワードデータをロードすることができます。

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

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

構文

unsigned long long __ldrexd(volatile void *ptr)
各項目には以下の意味があります。
ptr
メモリからロードされるデータのアドレスを指します。ロードされるデータの型を指定するには、パラメータを適切なポインタ型にキャストします。

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

命令 ロードされたデータのサイズ ポインタ型
LDREXD long long long long *

戻り値

__ldrexd コンパイラ組み込み関数は、 ptr が示すメモリアドレスからロードされたデータを返します。

エラー

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