2016-07-28 7 views
1

Raspberry Pi 3 uses a Broadcom SoC with and ARMv8 A53 core. 또한 Debian Jessie에 기반한 32 비트 OS를 사용합니다. ARM의 ARM NEON programming quick reference 3.2 절에 따르면, 명령을 설정ARMv8-a에서 Aarch32 명령어 세트를 활성화하는 방법은 무엇입니까?

ARMv8-A AArch32 명령어 세트는 A32 (ARM 명령어 세트는 32 비트의 고정 길이 명령어 세트) 및 T32 (Thumb 명령어 세트로 구성 16 비트 고정 길이 명령 세트, Thumb2 명령 세트, 16 또는 32 비트 길이 명령 세트). ARMv7-A 명령어 세트의 상위 집합이므로 기존 소프트웨어를 실행하는 데 필요한 하위 호환성을 유지합니다. A32 및 T32에는 NEON division 및 Cryptographic Extension 명령어를 포함하여 A64 명령어 세트와의 정렬을 유지하기위한 몇 가지 추가 기능이 있습니다. NEON 배정도 부동 소수점 (IEEE 규격)도 지원됩니다.

내가 가지 How to test Aarch32 execution environment on Aarch64?에서 GCC 메일 링리스트에 잠시 다시 비슷한 질문을하지만 확실히 대답 이해하지 못했다

: 당신이 팔 툴체인 CRC를 확장자로 컴파일하고 나면

-march=armv8-a+crc을 사용하거나 사용하도록 설정하는 -mcpu 옵션을 사용하여 사용하도록 설정할 수 있습니다. Crypto 확장을 사용하려면 오른쪽 -mfpu 옵션을 지정해야합니다.

내 질문은 간단합니다 ... 어떻게하면 Raspberry Pi 3의 CRC 및 Crypto 확장을 모두 사용할 수 있습니까?


다음은 작동하지 않는 시도입니다.

시도 (4)는 기본적으로 Aarch64 : gcc -march=armv8-a+crc+crypto -mtune=cortex-a53에서 수행하는 것과 비슷합니다. 시도 (5)는 실제로 CRC를 가능하게하지만, PMULL, PMULL2, AES, SHA1SHA2과 같은 다른 어떤 것도 활성화 할 수없는 것으로 보입니다.

  1. gcc -D__ARM_FEATURE_CRYPTO -D__ARM_FEATURE_CRC -march=armv8-a+crc+crypto -mcpu=cortex-a53 -mfpu=neon test.cc -o test.exe
  2. gcc -D__ARM_FEATURE_CRYPTO -D__ARM_FEATURE_CRC -march=armv8-a+crc -mcpu=cortex-a53 -mfpu=neon test.cc -o test.exe
  3. gcc -D__ARM_FEATURE_CRYPTO -D__ARM_FEATURE_CRC -march=armv8-a -mcpu=cortex-a53 -mfpu=neon test.cc -o test.exe
  4. gcc -march=armv8-a+crc+crypto -mcpu=cortex-a53 -mfpu=neon test.cc -o test.exe
  5. gcc -march=armv8-a+crc -mcpu=cortex-a53 -mfpu=neon test.cc -o test.exe
  6. gcc -march=armv8-a -mcpu=cortex-a53 -mfpu=neon test.cc -o test.exe

,
$ gcc -v 
Using built-in specs. 
COLLECT_GCC=gcc 
COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-linux-gnueabihf/4.9/lto-wrapper 
Target: arm-linux-gnueabihf 
Configured with: ../src/configure -v --with-pkgversion='Raspbian 4.9.2-10' --with-bugurl=file:///usr/share/doc/gcc-4.9/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.9 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.9 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libitm --disable-libquadmath --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.9-armhf/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.9-armhf --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.9-armhf --with-arch-directory=arm --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-sjlj-exceptions --with-arch=armv6 --with-fpu=vfp --with-float=hard --enable-checking=release --build=arm-linux-gnueabihf --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf 
Thread model: posix 
gcc version 4.9.2 (Raspbian 4.9.2-10) 

답변

4

간단히 말해서 "-mfpu 오른쪽"옵션은 -mfpu=crypto-neon-fp-armv8이어야합니다.

+0

Pi-2의 경우에도 -mfpu = neon-vfpv4가 필요합니다. -mfpu = neon은 구형 Cortex-A8/A9 FPU 용이며 몇 가지 새로운 지침을 놓치지 마십시오. – Notlikethat

+0

이 사람들은 어디서 이런 것들을 생각해 낼 수 있습니까? 그 중 하나는 [GCC 커맨드 라인 스위치의 ARM 블로그] (http://community.arm.com/groups/tools/blog/2013/04/15)에서 탈출했습니다./arm-cortex-a-processors-and-gcc-command-lines)를 사용합니다. [AArch64 옵션] (http://gcc.gnu.org/onlinedocs/gcc/AArch64-Options.html)에 문서화되어 있다면 확실히 좋을 것입니다. – jww

+0

@jww : AArch64를 타겟팅하지 않았습니다. 관련 컴파일러 옵션은 항상 호스트가 아닌 대상에 의존합니다. AArch64 시스템에서 크로스 컴파일하는 것은 중요하지 않습니다.나는'-m32'에만 적용되는 x86 옵션이 있지만'-m64' 나'-mx32'와는 호환되지 않을 것이라고 확신합니다. 아키텍처가 AArch32 및 AArch64보다 더 유사하기 때문에 x86에 대해서는 여러 가지 문제가 있습니다. –