我正在尝试编写一个简单的函数来在我的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;
}
我对内联汇编很新,所以我可能犯了一些错误
答案 0 :(得分: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"
);
BTW,Beagleboard支持NEON,NEON比Cortex-A8(Beagleboard内部的CPU核心)上的VFP 更强更快
答案 1 :(得分: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
。