Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gcc 使用ARM内联组件的VFP_Gcc_Assembly_Arm_Beagleboard - Fatal编程技术网

Gcc 使用ARM内联组件的VFP

Gcc 使用ARM内联组件的VFP,gcc,assembly,arm,beagleboard,Gcc,Assembly,Arm,Beagleboard,我正在尝试编写一个简单的函数来使用我的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.F3

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


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

您应该用分号
结束每一行或带有换行符
\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(Beagleboard内部的CPU核心)上的VFP快得多。

你应该用分号结束每一行
或带有换行符
\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(Beagleboard内部的CPU核心)上的VFP快得多。

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


__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

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


__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>代码>。

您可能想考虑使用内含函数而不是原始ASM,这样可以节省很多时间和麻烦。ḿ 试图加速一个程序-本质并没有帮助://每一个内在的映射到一个ASM指令,所以对于上述非常简单的情况,如果本质上没有帮助,那么原始ASM不太可能做得更好。你可能想考虑使用本质而不是原始ASM,这会节省很多时间和麻烦。ḿ 试图加速一个程序-intrinsic没有帮助:/Well每个内在映射到一条asm指令,因此对于上述非常简单的情况,如果intrinsic没有帮助,那么原始asm不可能做得更好。