Да, регистры 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