gpt4 book ai didi

c - 非 sse2 架构上 128 位值的按位运算

转载 作者:行者123 更新时间:2023-11-30 19:26:54 26 4
gpt4 key购买 nike

我正在用 C 编写一个例程,针对嵌入式平台。
在例程中,我需要对 128 执行按位 XORSHIFT RIGHT 运算- 位值。
目标架构没有SSE2,因此不支持 native 128位操作。
我遇到了this答案模拟软件中的SHIFT操作。
我的问题是,是否有更好的方法来做到这一点,我的意思是用更好的数据结构来表示 128 位值以及模拟 SHIFT 和 XOR 操作的最佳方法而不是使用递归(如链接中的答案中所做的那样) )。我希望最大限度地减少有限堆栈内存的使用。

最佳答案

您可以使用结构来存储 128 位数据,如下所示

typedef struct
{
uint32_t a;
uint32_t b;
uint32_t c;
uint32_t d;
} Type_128bit;

那么你可以编写一个左移函数如下

int leftshift(Type_128bit in, Type_128bit out, int value)
{
int val;
if (value >= 128)
{
return (-1); // error condition
}
else if (value < 32)
{
out->a = (in->a << value) | (in->b >> value);
out->b = (in->b << value) | (in->c >> value);
out->c = (in->c << value) | (in->d >> value);
out->d = in->d << value;
}
else if (value < 64)
{
val = value - 32;
out->a = (in->b << val) | (in->c >> val);
out->b = (in->c << val) | (in->d >> val);
out->c = (in->d << val);
out->d = 0x00;
}
else if (value < 96)
{
val = value - 64;
out->a = (in->c << val) | (in->d >> val);
out->b = (in->d << val);
out->c = 0x00;
out->d = 0x00;
}
else // value < 128
{
val = value - 96;
out->a = (in->d << val);
out->b = 0x00;
out->c = 0x00;
out->d = 0x00;
}
return (0); //success
}

这将避免上述解决方案的递归并提供更好的运行时间。但代码量会增加,需要仔细测试代码。

关于c - 非 sse2 架构上 128 位值的按位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56491182/

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