VFP с использованием встроенной сборки ARM

Я пытаюсь написать простую функцию для использования VFP на моем бигльборде. Однако я получаю следующую ошибку: ожидается «)» перед токеном «:». Вот код:

float floatmod(float a, float b) {
float result;
        __asm__volatile__(
        "VMOV.F32 s7, %p[a]"
        "VMOV.F32 s8, %p[b]"
        "VDIV.F32 s9, s7, s8"
        "VMLS.F32 s7, s8, s9"
        :s7 "=t" (c)
        :[a] "t" (a), [b] "t" (b)
        :"s7", "s8", "s9"
        );      
        return c;

}

Я довольно новичок во встроенном ассемблере, поэтому я мог допустить некоторые ошибки.


person fussy    schedule 21.05.2013    source источник
comment
Возможно, вы захотите использовать для этого встроенные функции, а не сырой ассемблер — это сэкономит много времени и проблем.   -  person Paul R    schedule 21.05.2013
comment
Я пытался ускорить программу - встроенные функции не помогли :/   -  person fussy    schedule 21.05.2013
comment
Что ж, каждая встроенная программа сопоставляется с одной ассемблерной инструкцией, поэтому для описанного выше очень простого случая, если встроенные функции не помогли, то необработанный ассемблер вряд ли будет лучше.   -  person Paul R    schedule 21.05.2013


Ответы (2)


Вы должны заканчивать каждую строку либо точкой с запятой ;, либо символом новой строки \n:

__asm__ __volatile__(
    "VMOV.F32 s7, %p[a];"
    "VMOV.F32 s8, %p[b];"
    "VDIV.F32 s9, s7, s8;"
    "VMLS.F32 s7, s8, s9;"
    :s7 "=t" (c)
    :[a] "t" (a), [b] "t" (b)
    :"s7", "s8", "s9"
);

Кстати, Beagleboard поддерживает NEON, а NEON намного быстрее, чем VFP на Cortex-A8 (ядро ЦП внутри Beagleboard)

person Marat Dukhan    schedule 21.05.2013

Другой альтернативой является простое использование многострочных строк:


__asm__volatile__("
    VMOV.F32 s7, %p[a]
    VMOV.F32 s8, %p[b]
    VDIV.F32 s9, s7, s8
    VMLS.F32 s7, s8, s9
    "
    :s7 "=t" (c)
    :[a] "t" (a), [b] "t" (b)
    :"s7", "s8", "s9"
);

Это также работает в ассемблере, где ; не является разделителем операторов (некоторые ассемблеры используют точку с запятой в качестве индикатора комментария). Это по-прежнему избавляет вас от необходимости вводить \n в каждой строке.

person FrankH.    schedule 21.05.2013