Raspberry Pi 3 uses a Broadcom SoC with and ARMv8 A53 core. Es verwendet auch ein 32-Bit-Betriebssystem basierend auf Debian Jessie. Nach ARM NEON programming quick reference ARM, Abschnitt 3.2, Instruction eingestellt:Wie kann der Aarch32-Befehlssatz auf ARMv8-a aktiviert werden?
Der ARMv8-A AArch32 Befehlssatz besteht aus A32 (ARM-Befehlssatz, ein 32-Bit-Festlängenbefehlssatz) und T32 (Thumb-Befehlssatz, ein 16-Bit-Befehlssatz fester Länge; Thumb2-Befehlssatz, Befehlssatz mit 16 oder 32 Bit Länge). Es ist eine Obermenge des ARMv7-A-Befehlssatzes, so dass die für die Ausführung der vorhandenen Software erforderliche Abwärtskompatibilität erhalten bleibt. Es gibt einige Zusätze zu A32 und T32, um die Ausrichtung auf den A64-Befehlssatz aufrechtzuerhalten, einschließlich der NEON-Division und der kryptografischen Erweiterungsinstruktionen. NEON Doppelpräzision Fließkomma (IEEE-Konformität) wird ebenfalls unterstützt.
I Art eine ähnliche Frage fragte vor einiger Zeit auf der GCC-Mailingliste an How to test Aarch32 execution environment on Aarch64? Aber ich verstehe nicht ganz die Antwort:
Sobald Sie mit einem Arm Werkzeugkette der CRC-Erweiterung kompilierens kann durch
-march=armv8-a+crc
oder Auswahl einer-mcpu
Option aktiviert werden, die es ermöglicht. Um die Crypto-Erweiterung zu aktivieren, müssen Sie die richtige-mfpu
Option angeben.
Meine Frage ist einfach ... Wie aktiviere ich sowohl CRC und Crypto-Erweiterungen für den Raspberry Pi 3?
Hier sind einige Versuche, die nicht funktionieren.
Versuch (4) ist ähnlich wie wir es nativ unter Aarch64 tun: gcc -march=armv8-a+crc+crypto -mtune=cortex-a53
. Versuch (5) aktiviert tatsächlich CRC, aber ich kann anscheinend nichts anderes aktivieren, wie PMULL
, PMULL2
, AES
, SHA1
und SHA2
.
gcc -D__ARM_FEATURE_CRYPTO -D__ARM_FEATURE_CRC -march=armv8-a+crc+crypto -mcpu=cortex-a53 -mfpu=neon test.cc -o test.exe
gcc -D__ARM_FEATURE_CRYPTO -D__ARM_FEATURE_CRC -march=armv8-a+crc -mcpu=cortex-a53 -mfpu=neon test.cc -o test.exe
gcc -D__ARM_FEATURE_CRYPTO -D__ARM_FEATURE_CRC -march=armv8-a -mcpu=cortex-a53 -mfpu=neon test.cc -o test.exe
gcc -march=armv8-a+crc+crypto -mcpu=cortex-a53 -mfpu=neon test.cc -o test.exe
gcc -march=armv8-a+crc -mcpu=cortex-a53 -mfpu=neon test.cc -o test.exe
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)
Beachten Sie, dass Sie selbst für einen Pi 2 wahrscheinlich '-mfpu = neon-vfpv4' möchten -' -mfpu = neon' ist für die älteren Cortex-A8/A9 FPUs und vermisst einige neuere Anweisungen. – Notlikethat
Woher kommen diese Leute mit diesem Zeug ... Das entkam sogar dem [ARM-Blog auf GCC-Befehlszeilenschalter] (http://community.arm.com/groups/tools/blog/2013/04/15/Arm-Cortex-A-Prozessoren-und-GCC-Kommandozeilen). Es wäre sicher schön, wenn es unter [AArch64 Options] (http://gcc.gnu.org/onlinedocs/gcc/AArch64-Options.html) dokumentiert wäre. – jww
@jww: Sie zielen nicht auf AArch64. Relevante Compileroptionen hängen immer vom Ziel und nicht vom Host ab. Es spielt keine Rolle, dass Sie ein AArch64-System kompilieren.Ich bin mir sicher, dass es x86-Optionen gibt, die nur mit "-m32", aber nicht mit "-m64" oder "-mx32" oder umgekehrt angewendet werden. Obwohl ich denke, dass die Dokumente die Dinge für x86 viel mehr miteinander verbinden, weil die Architekturen vielleicht ähnlicher sind als AArch32 und AArch64. –