2012-10-09 2 views

답변

3

우리는 우리는 또한 수동으로 확인할 수 있습니다

... 
GCC now supports VFPv4-based FPUs and FPUs with single-precision-only VFP. 
... 

을 주장하는 gcc release log에서 그것을 찾아 볼 수 있습니다. ARM 아키텍처 설명서에 따르면 VFPv4는 최소한 Vector Fused Multiply Accumulate/Subtract을 추가했습니다.

void test_vfp4() { 
    asm("VFMA.F32 q1, q2, q3"); 
} 

-mfpu=neon-vfpv4 스위치와 함께이 컴파일

gcc -mfpu=neon-vfpv4 -O2 -marm -c vfpv4.c 

(그렇지 않으면 내 툴 체인은 Error: selected processor does not support ARM mode 'vfma.f32 q1,q2,q3' 말한다) 및

arm-linux-gnueabihf-objdump -S vfpv4.o 

00000000 <test_vfp4>: 
    0: f2042c56 vfma.f32 q1, q2, q3 
    4: e12fff1e bx lr 
아래에 나열해야합니다에 대한 이진 덤프

그러나 이러한 융합 된 명령어에 대해서는 intrinsic listed을 찾을 수 없거나 다른 방법으로 생각할 수 없기 때문에 C 레벨에서 어떻게 사용할 수 있는지 알 수 없습니다.

+2

당신이 제안한 것은 컴파일러를 검증하기에 충분하다. 단순히 gcc 바이너리가 -mfpu = neon-vfpv4를 받아들이면 지원이 거기에 있음을 의미하기 때문이다. 컴파일러가 추가 지침을 실제로 사용하는지 여부는 전혀 다른 질문입니다. – unixsmurf

+1

[vfp.md] (http://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/config/arm/vfp.md;hb=HEAD#l892)에는 [arm.md] (http://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/config/arm/arm.md;hb=HEAD#l1585)와 같은 설명은 다음과 같습니다. 'mla' 정수 버전. 나는 gcc가'mla' 버전을 사용하는 것을 보았습니다. 컴파일러가 명령을 사용할 수도 있습니다. 그러나 IEEE 플로트의 과소 사용으로 인해 'C'가 잘못 매칭되기 때문에 종종 어렵습니다. 즉, 표준 및 기타 문제는 종종 사용을 방지합니다. 만약 당신이 이것을 원한다면 저는 - 양산 수학으로 컴파일 할 것입니다. 게임 렌더링과 로켓 제어에는 서로 다른 요구가 있습니다. –

+0

Richard Earnshaw의 [우수한 블로그 게시물] (http://community.arm.com/groups/tools/blog/2013/04/15/arm-cortex-a-processors-and-gcc-command-lines) Cortex CPU와 함께 사용할 FPU 유형. '-Ofast' 또는'-O3'과'-ffast-math'를 사용하십시오. –

관련 문제