4.7.41.  __swp

此内在函数在编译器生成的指令流中插入 SWP{size} 指令。 它允许从 C 或 C++ 代码中在内存位置之间交换数据。

Note

在 ARMv6 和更高版本中,不提倡使用 SWPSWPB

语法


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

其中:

val

是要写入到内存中的数据值。

ptr

指向要写入到内存中的数据的地址。 要指定所写入的数据大小,请将参数类型转换为相应的整型。

Table 4.12. __swp 内在函数支持的访问宽度 

指令 加载的数据大小 C 类型转换
SWPB 无符号字节 ( char *)
SWP ( int *)

返回值

val 覆盖以前位于 ptr 所指向的内存地址中的数据值之前,__swp 内在函数将返回该值。

示例


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

另请参阅

Copyright © 2007 ARM Limited. All rights reserved. ARM DUI 0348AC
Non-Confidential