2016-07-27 5 views
0

는 I 이전 네온 플래그 컴파일 아암 바이너리 분해 :네온 플래그로 vdiv 명령이 생성되는 이유는 무엇입니까?

텍스 A9 -mfpu = 네온 -mfloat-ABI = softfp -ftree-벡터화

덤프 생성 vdiv.f64 지시를 나타내고 = -mcpu 컴파일러에 의해. armv7 (cortex-a9)의 암 설명서에 따르면 네온 simd isa는 vdiv 명령을 지원하지 않지만 부동 소수점 (vfp) 엔진은 지원합니다. 왜이 명령이 생성됩니까? 그것은 다음 vfp에 의해 실행됩니다 부동 소수점 명령은 무엇입니까? 네온 및 VFP 모두 부동 소수점에 대한 더하기 및 곱하기를 지원하므로 어떻게 다른 값과 다른 값을 구할 수 있습니까?

+0

예, 이것은 VFP 명령어입니다. AArch32 네온은 64 비트 부동 소수점에서 전혀 작동하지 않으므로 쉽게 볼 수 있습니다. – EOF

+0

답장을 보내 주셔서 감사합니다.하지만 컴파일러에서 생성 한 "vadd"가 표시되면 두 엔진 모두이 명령어를 구현하므로 NEON인지 VFP 명령어인지 어떻게 알 수 있습니까? 나는 arm cortex-a9 프로세서와 arm-none-linux-gnueabi * toolchain으로 작업하고 있습니다. –

+2

네온은 레지스터 이름'D [n]'과'Q [n]'과 명령어 후행 'F32' (정수 명령어의 경우 I [n])을 사용하며, VFP는'S [n] n]'과 명령어 - 포스트 픽스'F64' 또는'F32'를 사용합니다. 그 조합은 모호하지 않습니다. – EOF

답변

1

Cortex-A9의 경우, the NEON FPU option also implements VFP; VFP 전용 FPU 옵션의 상위 16 비트 레지스터입니다.

보다 일반적으로 아키텍처는 적어도 단 정밀도 VFP를 구현하지 않고 부동 소수점 고급 SIMD를 구현할 수 없으므로 GCC의 -mfpu=neon도 VFPv3을 의미합니다. 입니다. 부동 소수점 기능이 전혀없는 정수 전용 고급 SIMD를 구현할 수는 있지만 GCC가이를 지원할 수 있는지 (또는 누구나 그런 것을 작성한 적이 있는지)는 확실하지 않습니다.

고급 SIMD는 배정 밀도를 지원하지 않기 때문에 배정 밀도 데이터 (즉, <op>.F64)에서 작동하는 것은 분명히 VFP입니다. 실제 VFP 및 고급 SIMD 변형 구문은 구문에서 명확합니다. 32 비트 s 레지스터에서 작동하는 단 정밀도 연산 (즉, <op>.F32)은 스칼라이므로 VFP입니다. 더 큰 64 비트 d 또는 128 비트 q 레지스터에서 작동하는 경우 여러 개의 32 비트 값을 동시에 처리하므로 벡터화 된 고급 SIMD 명령어입니다.

+0

귀하의 설명은 매우 명확하고 내 질문을 해결합니다. 이 질문에 답해 주셔서 감사합니다. –

관련 문제