ARM Cortex-A8: как использовать неон и vfpv3

Я использую процессор Cortex-A8, и я не понимаю, как использовать -mfpu флаг.

на коре-А8 есть оба vfpv3 и неон сопроцессоры. Раньше я не знал, как использовать неон, поэтому я использовал только

gcc -marm -mfloat-abi=softfp -mfpu=vfpv3

теперь я понял, как работают процессоры SIMD, и я написал определенный код, используя неоновые встроенные компоненты. Для использования neon co-processor теперь флаг my-mfpu должен измениться на -mfpu=neon, Так что мой командная строка компилятора выглядит так:

gcc -marm -mfloat-abi=softfp -mfpu=neon

теперь, означает ли это, что мой vfpv3 больше не используется? У меня есть много кода, который не использует NEON, эти части не используют vfpv3.

если оба neon и vfpv3 все еще используются, то у меня нет проблем, но если используется только один из них, как я могу использовать оба?

1 ответов


неон подразумевает наличие традиционной поддержки VFP тоже. VFP можно использовать для" нормальных " (не векторных) вычислений с плавающей запятой. Кроме того, NEON не поддерживает двойную точность FP, поэтому для этого могут использоваться только инструкции VFP.
Что вы можете сделать, это добавить-S в командную строку gcc и проверить сборку. Инструкции, начинающиеся с V (например, vld1.32, vmla.F32) являются неоновыми инструкциями, а те, которые начинаются с F (fldd, fmacd), являются VFP. (Хотя ARM docs теперь предпочитают использовать префикс V даже для VFP инструкции, GCC этого не делает.)