ARM Cortex-A8: ¿Cómo hacer uso tanto de neón y vfpv3
-
26-09-2019 - |
Pregunta
Estoy usando el procesador Cortex-A8 y no voy a entender cómo usar la bandera -mfpu
.
En el Cortex-A8 hay tanto vfpv3 y neón co-procesadores. Anteriormente era no saber cómo utilizar el neón por lo que sólo estaba usando
gcc -marm -mfloat-abi=softfp -mfpu=vfpv3
Ahora he entendido cómo funcionan los procesadores SIMD y he escrito determinado código usando las características intrínsecas de neón. Para el uso de neón coprocesador ahora mi bandera -mfpu tiene que cambiar para -mfpu=neon
, por lo que mi compilador de línea de comandos es similar al siguiente
gcc -marm -mfloat-abi=softfp -mfpu=neon
Ahora bien, ¿significa esto que mi vfpv3
no se utiliza más? Tengo un montón de código que no está haciendo uso de neón, no las partes que no hacen uso de vfpv3
.
Si tanto neón y vfpv3 todavía se utiliza entonces yo no tengo problemas, pero si se utiliza sólo uno de ellos, ¿cómo puedo hacer uso de ambos?
Solución
NEON implica contar con el apoyo tradicional de VFP también. VFP se puede utilizar para los cálculos de "normal" (no vectorial) de punto flotante. Además, NEON no soporta FP doble precisión por lo que sólo instrucciones VFP se pueden utilizar para eso.
Lo que puede hacer es añadir -S a la línea de comandos de gcc y comprobar el montaje. Instrucciones de arranque con V (por ejemplo vld1.32, vmla.f32) son instrucciones de neón, y los que comienzan con F (DMDF, fmacd) son VFP. (Aunque docs ARM ahora prefieren usar el prefijo V, incluso para las instrucciones VFP, GCC no hace eso.)