首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Altivec编译错误

Altivec编译错误
EN

Stack Overflow用户
提问于 2013-09-17 02:13:46
回答 1查看 578关注 0票数 0

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

代码语言:javascript
复制
 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 }

然而,当我编译时,我得到一个错误:错误:无法在不同大小的向量值之间进行转换。

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

我现在用Paul的解决方案让它工作了。

HOwever,当我试图打印它的时候,它给了我错误,因为我在保罗的评论下发表了评论。

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

EN

回答 1

Stack Overflow用户

发布于 2013-09-17 02:19:34

您需要在初始化过程中设置向量值:

代码语言:javascript
复制
 __vector unsigned char v1 = (__vector unsigned char)( '0', '1', '2', ... );

然而,对于gcc,你可能应该使用更普通的带大括号的语法,而不是旧的摩托罗拉语法:

代码语言:javascript
复制
 __vector unsigned char v1 = { '0', '1', '2', ... };

为了打印矢量,一些版本的gcc允许摩托罗拉扩展以打印AltiVec矢量,例如

代码语言:javascript
复制
printf("%vc\n", v1);

如果这不起作用,那么您可能需要使用自己的打印例程,例如使用联合:

代码语言:javascript
复制
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");
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18834581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档