Altivec编译错误

Altivec编译错误,c,gcc,simd,powerpc,altivec,C,Gcc,Simd,Powerpc,Altivec,我试图遵循一个简单的altivec初始化示例,如下所示: 1 // Example1.c 2 #include <stdio.h> #include <altivec.h> 3 4 int main() 5 { 6 __vector unsigned char v1; 7 8 // Assign 16 8-bit elements to vector v1 9 v1 = (__vector unsigned char)( 10 '0', '1',

我试图遵循一个简单的altivec初始化示例,如下所示:

 1 // Example1.c
 2 #include <stdio.h>
   #include <altivec.h>
 3
 4 int main()
 5 {
 6 __vector unsigned char v1;
 7
 8 // Assign 16 8-bit elements to vector v1
 9 v1 = (__vector unsigned char)(
10 '0', '1', '2', '3',
11 '4', '5', '6', '7',
12 '8', '9', 'A', 'B',
13 'C', 'D', 'E', 'F');
14
15 // Print out the contents of v1 char by char
16 // &v1 is casted to (unsigned char *)
17 for(int i = 0; i < 16; i++)
18 printf("%c", ((unsigned char *)(&v1))[i]);;
19 
20
21 return 0;
22 }
1//Example1.c
2#包括
#包括
3.
4 int main()
5 {
6 _矢量无符号字符v1;
7.
8//将16个8位元素分配给向量v1
9 v1=(uu向量无符号字符)(
10 '0', '1', '2', '3',
11 '4', '5', '6', '7',
12'8'、'9'、'A'、'B',
13‘C’、‘D’、‘E’、‘F’;
14
15//逐字符打印v1字符的内容
16//&v1被强制转换为(未签名字符*)
17表示(int i=0;i<16;i++)
18 printf(“%c”)((无符号字符*)(&v1))[i]);;
19
20
21返回0;
22 }
然而,当我编译时,我得到一个错误,错误是:不能在不同大小的向量值之间转换

有人知道为什么会这样吗?我的gcc版本是4.4.6

我现在可以用保罗的解决方案了

然而,当我试图打印它时,它给了我错误,正如我在Paul的评论下评论的那样


有人知道为什么会这样吗?

您需要设置向量值作为初始化的一部分:

 __vector unsigned char v1 = (__vector unsigned char)( '0', '1', '2', ... );
但是,对于gcc,您可能应该使用更普通的大括号语法,而不是旧的Motorola语法:

 __vector unsigned char v1 = { '0', '1', '2', ... };
为了打印矢量,某些版本的gcc允许摩托罗拉对AltiVec矢量的printf进行扩展,例如

printf("%vc\n", v1);
如果这不起作用,则您可能需要滚动您自己的打印例程,例如使用union:

void vec_print_u8(__vector unsigned char v)
{
    union {
        __vector unsigned char v;
        unsigned char a[16];
    } u;
    int i;

    u.v = v;
    for (i = 0; i < 16; ++i)
    {
        printf("%2c", u.a[i]);
    }
    printf("\n");
}
void vec_print_u8(_vector unsigned char v)
{
联合{
__向量无符号字符v;
无符号字符a[16];
}u;
int i;
u、 v=v;
对于(i=0;i<16;++i)
{
printf(“%2c”,美国[i]);
}
printf(“\n”);
}

Hi,对于第一行,我仍然无法初始化它。然而,当我试图用printf(“%d\n”,(unsigned char)v1[I])打印它时,第二个方法是有效的;我得到一个错误,说rabind.c:91:error:subscripted value既不是数组也不是指针您知道我如何访问向量中的每个元素吗?