__strex コンパイラ組み込み関数

このコンパイラ組み込み関数を使用して、コンパイラによって生成される命令ストリームに STREX[size] 形式の命令を挿入します。C または C++ コードの STREX 命令を使用して、データをメモリにストアできます。

Show/hide構文

int __strex(unsigned int val, volatile void *ptr)

各項目には以下の意味があります。

val

メモリに書き込む値を指定します。

ptr

メモリに書き込まれるデータのアドレスを指します。書き込まれるデータのサイズを指定するには、パラメータを適切な整数型にキャストします

Table 18. __strex コンパイラ組み込み関数によってサポートされるアクセス幅

命令ストアされたデータのサイズC のキャスト
STREXB符号なしバイト(char *)
STREXH符号なしハーフワード(short *)
STREXワード(int *)

Show/hide戻り値

__strex コンパイラ組み込み関数は、以下を返します。

0

STREX 命令が正しく実行された場合

1

STREX 命令がロックアウトされた場合

Show/hideエラー

STREX 命令をサポートしないターゲット向けにコンパイルされる場合、コンパイラは __strex コンパイラ組み込み関数を認識しません。この場合、コンパイラによって警告またはエラーが生成されます。

__strex コンパイラ組み込み関数は、ダブルワードデータへのアクセスをサポートしません。サポートされないアクセス幅を指定すると、コンパイラによってエラーが生成されます。

Show/hide

int foo(void)
{
    int loc=0xff;
    return(!__strex(0x20, (volatile char *)loc));
}

コマンドラインオプション --cpu=6k を使用してこのコードをコンパイルすると、以下のコードが生成されます。

||foo|| PROC
    MOV      r0,#0xff
    MOV      r2,#0x20
    STREXB   r1,r2,[r0]
    RSBS     r0,r1,#1
    MOVCC    r0,#0
    BX       lr
ENDP

Show/hide関連項目

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0491EJ
Non-ConfidentialID081711