2012-01-17 9 views
0

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

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

Благодаря

+0

Тег VFP здесь, в StackOverflow, означает «Visual FoxPro», язык программирования и базу данных. Вероятно, не имеет отношения к вашему вопросу. –

+0

Спасибо. Я отредактировал свой вопрос – user1116700

ответ

0

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

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

+0

Nope - ARMv7a не подразумевает какой-либо FPU, и есть SoC, которые реализуют v7a без каких-либо FPU, есть некоторые с VFPvsomethingorother, а также есть некоторые с Neon. – rsaxvc

0

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

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

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

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

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

softvfp + VFPv3

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

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

-mfloat-аби = имя

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^