Включите NEON на Cortex A8 с fpu, установленным либо на SoftVFP, либо на none.

Я пытаюсь создать исполняемый файл для Cortex A8, используя RVDS 4.0. В моем коде используется NEON, но я хочу установить для параметра fpu значение none или SoftVFP. На веб-сайте ARM упоминается, что NEON отключается, когда для fpu установлено значение SoftVFP. Это потому, что VFP и NEON совместно используют регистры?

Может кто-нибудь объяснить, почему я не могу использовать NEON, когда для fpu установлено значение SoftVFP, или есть ли какая-либо опция, с помощью которой я могу включить NEON, даже если для fpu установлено значение SOftVFP?

Спасибо


person user1116700    schedule 17.01.2012    source источник
comment
Тег VFP здесь, в StackOverflow, означает Visual FoxPro, язык программирования и базу данных. Вероятно, не имеет отношения к вашему вопросу.   -  person Tamar E. Granor    schedule 18.01.2012
comment
Спасибо. я отредактировал свой вопрос   -  person user1116700    schedule 18.01.2012


Ответы (2)


почему бы просто не использовать --cpu=7-A ? это должно подразумевать текущую опцию --fpu

softvfp — это библиотека эмуляции, думаю NEON просто не реализован

person pmeerw    schedule 22.02.2012
comment
Нет, ARMv7a не подразумевает никакого FPU, и есть SoC, которые реализуют v7a без FPU, есть с VFP, чем-то другим, а есть и с Neon. - person rsaxvc; 21.01.2014

Да, регистры NEON и VFP являются общими. Это упрощает поддержку переключения контекста операционной системой, поскольку любая ОС, поддерживающая VFP, также будет правильно обрабатывать NEON.

Небезопасно связывать код, созданный для softVFP, с кодом, созданным для аппаратного VFP, потому что они помещают аргументы/результаты функции в разные регистры — использование NEON очень похоже на использование аппаратного VFP в этом отношении.

Однако есть особый случай, когда вам нужно связать библиотеки SoftVFP, но вы знаете, что ваш SoC поддерживает это (вы знаете это? Есть много A8 без NEON). Особый случай называется softvfp+. Это работает так: аргументы функции передаются в целочисленных регистрах, но внутри функций компилятор может использовать FPU, или вы можете использовать NEON. Для компилятора ARM, нацеленного на CortexA8 с NEON, вы должны использовать --fpu=softvfp+vfpv3

См. здесь некоторые параметры компилятора ARM, связанные с этим. Многие другие компиляторы имеют аналогичные переключатели.

Для компиляторов ARM RVCT3.x и выше вам понадобится (http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0491c/CIHCJIFE.html):

софтвфп+вфпв3

Выбирает аппаратный векторный модуль с плавающей запятой, соответствующий VFPv3, с программной связью с плавающей запятой. Выберите этот параметр, если вы взаимодействуете с кодом Thumb с кодом ARM в системе, которая реализует модуль VFPv3.

Для GCC вам понадобится -mfloat-abi=softfp, и я думаю -mfpu=‘neon’. Из руководства GCC(http://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html):

-mfloat-abi=имя

Указывает, какой ABI с плавающей запятой использовать. Допустимые значения: «soft», «softfp» и «hard». Указание «soft» заставляет GCC генерировать выходные данные, содержащие библиотечные вызовы для операций с плавающей запятой. «softfp» позволяет генерировать код с использованием аппаратных инструкций с плавающей запятой, но по-прежнему использует соглашения о вызовах с плавающей запятой. «жесткий» позволяет генерировать инструкции с плавающей запятой и использует соглашения о вызовах, специфичные для FPU.

Значение по умолчанию зависит от конкретной целевой конфигурации. Обратите внимание, что ABI с плавающей запятой и с плавающей запятой не совместимы по ссылке; вы должны скомпилировать всю свою программу с одним и тем же ABI и связать с совместимым набором библиотек.

person rsaxvc    schedule 22.01.2014