ARM Cortex-A8: Como fazer uso de Neon e VFPV3
-
26-09-2019 - |
Pergunta
Estou usando o processador Cortex-A8 e não estou entendendo como usar o -mfpu
bandeira.
No Cortex-A8, existem ambos VFPV3 e néon co-processadores. Anteriormente eu não estava sabendo usar neon, então estava usando apenas
gcc -marm -mfloat-abi=softfp -mfpu=vfpv3
Agora eu entendi como os processadores SIMD são executados e escrevi certos código usando a Intrinsics de Neon. Para usar o co -processador de neon agora minha bandeira -mfpu tem que mudar para -mfpu=neon
, então minha linha de comando do compilador se parece com isso
gcc -marm -mfloat-abi=softfp -mfpu=neon
Agora, isso significa que meu vfpv3
não é mais usado? Eu tenho muito código que não está usando neon, as peças não usam vfpv3
.
Se o Neon e o VFPV3 ainda forem usados, não tenho problemas, mas se apenas um deles for usado, como posso usar os dois?
Solução
O neon implica ter o suporte tradicional de VFP também. O VFP pode ser usado para cálculos de ponto flutuante "normal" (não vetor). Além disso, o NEON não suporta FP de precisão dupla para que apenas as instruções VFP possam ser usadas para isso.
O que você pode fazer é adicionar -s à linha de comando do GCC e verificar a montagem. As instruções começando com v (por exemplo, vld1.32, vmla.f32) são instruções de neon, e aquelas que começam com f (fldd, fmacd) são VFP. (Embora os documentos do ARM agora preferam usar o prefixo V, mesmo para instruções de VFP, o GCC não faz isso.)