0

我正在尝试编写一个简单的函数来在我的 beagleboard 上使用 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;

}

我对内联汇编相当陌生,所以我可能犯了一些错误

4

2 回答 2

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比 Cortex-A8 上的 VFP快得多(Beagleboard 内部的 CPU 内核)

于 2013-05-21T16:09:01.447 回答
1

另一种选择是简单地使用多行字符串:


__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在每一行上输入。

于 2013-05-21T19:51:30.620 回答