gcc向量扩展不像文档中所述那样工作

时间:2012-05-15 20:39:55

标签: gcc sse vectorization

根据Using vector instructions through built-in functions,该程序应编译:

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测试,它不起作用)。捕获的地方在哪里?

1 个答案:

答案 0 :(得分: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 release notes;
  • 4.6.3中存在下标特征 ;和
  • 这两个功能都具体记录为“在C中”工作

...解释了你所看到的内容。

在编译为C时,这两个都适用于4.7.0,但在编译为C ++时则不行。