Ich verwende Cortex-A8-Prozessor und ich verstehe nicht, wie man das -mfpu
Flag benutzt.
Auf dem Cortex-A8 gibt es sowohl vfpv3 als auch neon Koprozessoren. Zuvor wusste ich nicht, wie man Neon benutzt, also benutzte ich nur
gcc -marm -mfloat-abi=softfp -mfpu=vfpv3
Jetzt habe ich verstanden, wie SIMD-Prozessoren laufen und ich habe einen bestimmten Code geschrieben, der NEON-Intrinsik verwendet. Um den Neon-Co-Prozessor jetzt zu verwenden, muss mein -mfpu-Flag in -mfpu=neon
geändert werden, sodass meine Compiler-Befehlszeile so aussieht
gcc -marm -mfloat-abi=softfp -mfpu=neon
Bedeutet das nun, dass mein vfpv3
nicht mehr benutzt wird? Ich habe eine Menge Code, der NEON nicht nutzt, verwenden diese Teile nicht vfpv3
.
Wenn sowohl neon als auch vfpv3 noch verwendet werden, habe ich keine Probleme, aber wenn nur einer von ihnen verwendet wird, wie kann ich beides nutzen?
NEON bedeutet auch, die traditionelle VFP-Unterstützung zu haben. VFP kann für "normale" (Nicht-Vektor-) Gleitkommaberechnungen verwendet werden. Außerdem unterstützt NEON keine Double-Precision-FP, daher können nur VFP-Anweisungen dafür verwendet werden.
Sie können -S zur Befehlszeile von gcc hinzufügen und die Assembly überprüfen. Anweisungen, die mit V beginnen (z. B. vld1.32, vmla.f32), sind NEON-Befehle und diejenigen, die mit F (fldd, fmacd) beginnen, sind VFP. (Obwohl ARM-Dokumente jetzt bevorzugen, das V-Präfix auch für VFP-Anweisungen zu verwenden, macht GCC das nicht.)
Tags und Links arm cortex-a8 neon compiler-flags