3.1.2. 명령어 내장 함수

ARM 컴파일러는 C 또는 C++ 코드에서 ARM 어셈블리 언어 명령어를 인식하는 데 필요한 다양한 명령어 내장 함수를 제공합니다. 이러한 내장 함수를 사용하면 C 코드 및 명령어 내장 함수의 조합을 통해 인라인 어셈블리 코드를 에뮬레이션할 수 있습니다.

일반 내장 함수

다음 일반 내장 함수는 ISO C 및 C++ 표준에 대한 ARM 언어 확장입니다.

이러한 내장 함수의 구현은 모든 아키텍처에서 사용할 수 있습니다.

IRQ 및 FIQ 인터럽트 제어용 내장 함수

다음 내장 함수를 사용하면 IRQ 및 FIQ 인터럽트를 제어할 수 있습니다.

이러한 내장 함수를 사용하여 모드, 상태 및 부정확한 데이터 어보트 설정을 비롯한 다른 모든 CPSR 비트를 변경할 수 없습니다. 따라서 CPSRSPSR의 제어 비트는 사용자 모드에서 변경할 수 없기 때문에 프로세서가 권한 모드에 있을 경우에만 내장 함수를 사용할 수 있습니다.

이 내장 함수는 ARM 및 Thumb 상태의 모든 프로세서 아키텍처에서 사용 가능합니다.

  • ARMv6(또는 이후 버전)을 지원하는 프로세서에 대해 컴파일하는 경우 이 함수에 대해 CPS 명령어가 인라인으로 생성됩니다. 예를 들면 다음과 같습니다.

        CPSID  i
    
  • ARM 상태의 ARMv4 또는 ARMv5를 지원하는 프로세서에 대해 컴파일하는 경우, 컴파일러는 MRSMSR 명령어의 시퀀스를 인라인합니다. 예를 들면 다음과 같습니다.

        MRS  r0, CPSR
        ORR  r0, r0, #0x80
        MSR  CPSR_c, r0
    
  • Thumb 상태의 ARMv4 또는 ARMv5를 지원하는 프로세서에 대해 컴파일하는 경우, 컴파일러는 도우미 함수를 호출합니다. 예를 들면 다음과 같습니다.

        BL    __ARM_disable_irq
    

이러한 명령어에 대한 자세한 내용은 어셈블러 설명서를 참조하십시오.

최적화 장벽 삽입용 내장 함수

ARM 컴파일러는 명령어 순서 변경, 일부 연산의 병합 등 다양한 최적화 작업을 수행할 수 있습니다. 메모리가 다중 프로세스에 의해 동시에 액세스되는 시스템 수준 프로그래밍과 같은 경우, 명령어 순서 변경 비활성화 및 메모리 강제 업데이트가 필요할 수도 있습니다.

다음 최적화 장벽 내장 함수는 코드를 생성하지 않지만, 코드 크기가 약간 커지고 메모리 액세스가 추가되는 결과를 가져올 수 있습니다.

Note

일부 시스템에서 메모리 장벽 내장 함수는 메모리 일관성을 보장할 정도로 충분하지 않을 수도 있습니다. 예를 들어 __memory_changed() 내장 함수는 레지스터에 있는 값을 메모리로 강제로 보냅니다. 그러나 데이터의 목적지가 버퍼링될 수 있는 영역에 있다면, 작성 버퍼에서 대기할 수도 있습니다. 이 경우 CP15에 기록하여 작성 버퍼를 고갈시켜야할 수도 있습니다. 자세한 내용은 ARM 프로세서의 기술 참조 문서를 참조하십시오.

네이티브 명령어 삽입용 내장 함수

다음 내장 함수를 사용하면 컴파일러가 생성한 명령어 스트림에 ARM 프로세서 명령어를 삽입할 수 있습니다.

디지털 시스템 처리용 내장 함수

다음 내장 함수는 DSP 알고리즘의 구현에 사용할 수 있습니다.

이러한 내장 함수는 다음에 대한 적절한 타겟 명령어를 만듭니다.

  • ARM v5TE 이후의 ARM 아키텍처

  • 'M' 변형을 제외한 Thumb-2 아키텍처

예를 들어 ARM5TE QDADD 명령어는 __qadd__qdbl의 조합으로 인식됩니다.

Copyright © 2002-2007 ARM Limited. All rights reserved.ARM DUI 0205HK
Non-Confidential