4.7.46. ARMv6 SIMD 내장 함수

ARM 아키텍처 v6 명령어 세트 아키텍처는 고성능 미디어 응용 프로그램의 효율적인 소프트웨어 구현을 위해 60개가 넘는 SIMD 명령어를 ARMv6에 추가합니다.

ARM 컴파일러는 ARMv6 SIMD 명령어에 매핑하는 내장 함수를 지원합니다. 이러한 내장 함수는 ARMv6 아키텍처 또는 프로세서에 대한 코드를 컴파일하는 경우 사용할 수 있습니다. 다음 목록에서는 이러한 내장 함수의 함수 프로토타입을 보여 줍니다. 이 목록에 나열된 함수 프로토타입은 내장 함수가 인식하는 ARMv6 명령어의 기본 형식을 나타냅니다. 내장 함수가 인식하는 기본 명령어의 이름을 사용하려면 내장 함수의 이름에 선행 밑줄(__)을 놓습니다. 예를 들어 __qadd16 내장 함수가 ARMv6 QADD16 명령어에 해당합니다.

Note

각 ARMv6 SIMD 내장 함수는 ARM v6 아키텍처 또는 프로세서에 대해 단일, 인라인, 기계 명령으로 컴파일됩니다. 그러나 컴파일러는 기본 명령어의 최적화된 형식을 사용할 기회를 감지할 경우 이를 수행할 수도 있습니다.

ARMv6 SIMD 명령어는 APSR(Application Program Status Register)에 GE[3:0]비트를 설정할 수 있습니다. SIMD 명령어는 이러한 플래그를 업데이트하여 SIMD 연산의 8/16비트 부분마다 "크거나 같음"을 나타낼 수도 있습니다.

ARM 컴파일러는 GE[3:0]비트를 전역 변수로 처리합니다. C 또는 C++ 프로그램 내에서 이러한 비트에 액세스하려면 다음 중 하나에 해당해야 합니다.

unsigned int __qadd16(unsigned int, unsigned int)
unsigned int __qadd8(unsigned int, unsigned int)
unsigned int __qasx(unsigned int, unsigned int)
unsigned int __qsax(unsigned int, unsigned int)
unsigned int __qsub16(unsigned int, unsigned int)
unsigned int __qsub8(unsigned int, unsigned int)
unsigned int __sadd16(unsigned int, unsigned int)
unsigned int __sadd8(unsigned int, unsigned int)
unsigned int __sasx(unsigned int, unsigned int)
unsigned int __sel(unsigned int, unsigned int)
unsigned int __shadd16(unsigned int, unsigned int)
unsigned int __shadd8(unsigned int, unsigned int)
unsigned int __shasx(unsigned int, unsigned int)
unsigned int __shsax(unsigned int, unsigned int)
unsigned int __shsub16(unsigned int, unsigned int)
unsigned int __shsub8(unsigned int, unsigned int)
unsigned int __smlad(unsigned int, unsigned int, unsigned int)
unsigned long long __smlald(unsigned int, unsigned int, unsigned long long)
unsigned int __smlsd(unsigned int, unsigned int, unsigned int)
unsigned long long __smlsld(unsigned int, unsigned int, unsigned long long)
unsigned int __smuad(unsigned int, unsigned int)
unsigned int __smusd(unsigned int, unsigned int)
unsigned int __ssat16(unsigned int, unsigned int)
unsigned int __ssax(unsigned int, unsigned int)
unsigned int __ssub16(unsigned int, unsigned int)
unsigned int __ssub8(unsigned int, unsigned int)
unsigned int __sxtab16(unsigned int, unsigned int)
unsigned int __sxtb16(unsigned int, unsigned int)
unsigned int __uadd16(unsigned int, unsigned int)
unsigned int __uadd8(unsigned int, unsigned int)
unsigned int __uasx(unsigned int, unsigned int)
unsigned int __uhadd16(unsigned int, unsigned int)
unsigned int __uhadd8(unsigned int, unsigned int)
unsigned int __uhasx(unsigned int, unsigned int)
unsigned int __uhsax(unsigned int, unsigned int)
unsigned int __uhsub16(unsigned int, unsigned int)
unsigned int __uhsub8(unsigned int, unsigned int)
unsigned int __uqadd16(unsigned int, unsigned int)
unsigned int __uqadd8(unsigned int, unsigned int)
unsigned int __uqasx(unsigned int, unsigned int)
unsigned int __uqsax(unsigned int, unsigned int)
unsigned int __uqsub16(unsigned int, unsigned int)
unsigned int __uqsub8(unsigned int, unsigned int)
unsigned int __usad8(unsigned int, unsigned int)
unsigned int __usada8(unsigned int, unsigned int, unsigned int)
unsigned int __usax(unsigned int, unsigned int)
unsigned int __usat16(unsigned int, unsigned int)
unsigned int __usub16(unsigned int, unsigned int)
unsigned int __usub8(unsigned int, unsigned int)
unsigned int __uxtab16(unsigned int, unsigned int)
unsigned int __uxtb16(unsigned int, unsigned int)

추가 참고

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