3

根据通过内置函数使用向量指令,该程序应编译:

int main(){
    double v_sse __attribute__ ((vector_size (16)));

    /*
     * Should work: "For the convenience in C it is allowed to use a binary vector operation where one operand is a scalar."
     */
    v_sse=v_sse+3.4;

    /*
     * Should work: "Vectors can be subscripted as if the vector were an array with the same number of elements and base type."
     */
    double result=v_sse[0];
}

相反,我在两个操作中都遇到错误,抱怨无效的操作数/类型。

我在 x86-64 系统上编译,所以 -msse2 是隐式的,我的编译器是 4.6.3(也用 4.7.0 测试过,它不起作用)。问题在哪里?

4

1 回答 1

5

http://gcc.gnu.org/onlinedocs/gcc/上的文档是指当前的开发。

查看 http://gcc.gnu.org/onlinedocs/gcc-XYZ/ 以找到您正在使用的版本的文档(请参阅http://gcc.gnu.org/onlinedocs/上的索引以获取指向每个系列的最新版本的文档)。

在这种情况下:

  • 4.6.3中没有记录二元运算符功能- 因为它是在 4.7 中作为新功能引入的:请参阅4.7 发行说明
  • 下标功能出现在 4.6.3 中;和
  • 这两个功能都被专门记录为“在 C 中”工作

...这解释了你所看到的。

当编译为 C 时,这两者都可以与 4.7.0 一起使用——但在编译为 C++ 时则不行。

于 2012-05-16T00:57:34.450 回答