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