gpt4 book ai didi

c - Altivec编译错误

转载 作者:行者123 更新时间:2023-11-30 17:47:43 25 4
gpt4 key购买 nike

我正在尝试遵循这样的简单示例 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 }

但是,当我编译时,出现错误:错误:无法在不同大小的 vector 值之间进行转换。

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

我现在可以使用 Paul 的解决方案来工作。

然而,当我尝试打印它时,当我在 Paul 的评论下评论时,它给了我错误。

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

最佳答案

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

 __vector unsigned char v1 = (__vector unsigned char)( '0', '1', '2', ... );

但是,对于 gcc,您可能应该使用带有大括号的更正常语法,而不是旧的 Motorola 语法:

 __vector unsigned char v1 = { '0', '1', '2', ... };

为了打印 vector ,某些版本的 gcc 允许 Motorola 扩展 printf 以获取 AltiVec vector ,例如

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");
}

关于c - Altivec编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18834581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com