gpt4 book ai didi

c - 128乘法和除法的内在函数

转载 作者:太空宇宙 更新时间:2023-11-04 01:57:15 24 4
gpt4 key购买 nike

在 x86_64 中,我知道 mul 和 div opp 代码支持 128 个整数,方法是将较低的 64 位放在 rax 寄存器中,将较高的 64 位放在 rdx 寄存器中。我在英特尔内在函数指南中寻找某种内在函数来执行此操作,但我找不到。我正在编写一个字长为 64 位的大数字库。现在我正在用这样的一个词除法。

int ubi_div_i64(ubigint_t* a, ubi_i64_t b, ubi_i64_t* rem)
{
if(b == 0)
return UBI_MATH_ERR;

ubi_i64_t r = 0;

for(size_t i = a->used; i-- > 0;)
{

ubi_i64_t out;
__asm__("\t"
"div %[d] \n\t"
: "=a"(out), "=d"(r)
: "a"(a->data[i]), "d"(r), [d]"r"(b)
: "cc");
a->data[i] = out;


//ubi_i128_t top = (r << 64) + a->data[i];
//r = top % b;
//a->data[i] = top / b;
}
if(rem)
*rem = r;

return ubi_strip_leading_zeros(a);
}

如果我可以在 x86intrinsics.h header 中使用某些东西而不是内联 asm,那就太好了。

最佳答案

gcc 有 __int128__uint128 类型。

与它们进行算术应该在它们存在时使用正确的汇编指令;我过去曾使用它们来获取产品的高 64 位,尽管我从未将其用于除法。如果它没有使用正确的,请根据需要提交错误报告/功能请求。

关于c - 128乘法和除法的内在函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32540740/

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