4.7.39. __strex

이 내장 함수는 STREX{size} 형식의 명령어를 컴파일러가 생성한 명령어 스트림에 삽입합니다. 이를 통해 C 또는 C++ 코드에서 STREX 명령어를 사용하여 메모리에 데이터를 저장할 수 있습니다.

구문

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

인수 설명:

val

메모리에 작성할 값입니다.

ptr

메모리에 작성할 데이터의 주소를 가리킵니다. 작성할 데이터의 크기를 지정하려면 매개변수를 적절한 정수 유형으로 캐스트합니다.

Table 4.10. __strex 내장 함수가 지원하는 액세스 너비 

명령어로드된 데이터 크기C 캐스트
STREXB부호 없는 바이트(char *)
STREXH부호 없는 하프워드(short int *)
STREX워드(int *)

반환 값

__strex 내장 함수는 다음을 반환합니다.

0

STREX 명령어가 성공할 경우

1

STREX 명령어가 잠길 경우

오류

STREX 명령어를 지원하지 않는 타겟에 대해 컴파일하는 경우 컴파일러는 __strex 내장 함수를 인식하지 않습니다. 이 경우 컴파일러에서 경고 또는 오류를 생성합니다.

__strex 내장 함수는 더블워드 데이터에 대한 액세스를 지원하지 않습니다. 지원되지 않는 액세스 너비를 지정하면 컴파일러에서 오류를 생성합니다.

예제

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

추가 참고

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