10.148 __swp コンパイラ組み込み関数

__swp コンパイラ組み込み関数を使用すると、SWP{size} 命令を使用して、C または C++ コードからレジスタとメモリ間でデータをスワップできます。

SWP{size} 命令は、プロセッサレジスタに値を読み込み、アトミック演算としてメモリ位置に値を書き込みます。

ARMv6 以降では、SWP および SWPB の使用はお勧めできません。

構文

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

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

命令 データのサイズ ポインタ型
SWPB バイト char *
SWP ワード int *

戻り値

__swp コンパイラ組み込み関数は、SWP 命令が ptr の示すメモリアドレスに格納されているデータ値を val で上書きする直前に、そのデータ値を返します。

int foo(void)
{
    int loc=0xff;
    return(__swp(0x20, (volatile int *)loc));
}
このコードをコンパイルすると、以下が生成されます。
||foo|| PROC
    MOV      r1, #0xff
    MOV      r0, #0x20
    SWP      r0, r0, [r1]
    BX       lr
    ENDP
関連情報
SWP と SWPB
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.