Активирайте NEON на Cortex A8 с fpu, зададен на SoftVFP или без

Опитвам се да създам изпълним файл за 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, има някои с VFPvsomethingorother, а има и някои с 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, свързани с това. Много други компилатори имат подобни ключове.

За 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’. От ръководството на GCC (http://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html):

-mfloat-abi=име

Указва кой ABI с плаваща запетая да се използва. Допустимите стойности са: „soft“, „softfp“ и „hard“. Посочването на „soft“ кара GCC да генерира изход, съдържащ извиквания на библиотека за операции с плаваща запетая. „softfp“ позволява генерирането на код с помощта на хардуерни инструкции с плаваща запетая, но все още използва конвенциите за извикване с мека плаваща точка. „hard“ позволява генериране на инструкции с плаваща запетая и използва специфични за FPU конвенции за извикване.

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

person rsaxvc    schedule 22.01.2014