首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在现代处理器中是否有128位整数的硬件支持?

在现代处理器中是否有128位整数的硬件支持?
EN

Stack Overflow用户
提问于 2015-12-12 07:46:24
回答 3查看 8.7K关注 0票数 20

我们是否仍然需要在软件中模拟128位整数,或者现在您的普通桌面处理器中是否有对它们的硬件支持?

EN

回答 3

Stack Overflow用户

发布于 2015-12-12 20:37:59

x86-64指令集可以使用一条指令执行64位*64位到128位(无符号imulmul,有符号imul为每个有一个操作数),因此我认为在某种程度上,x86指令集确实包括对128位整数的一些支持。

如果您的指令集没有执行64位*64位到128位的指令,那么您需要several instructions to emulate this

这就是为什么使用x86-64只需很少的指令就可以完成128位*128位到低128位的操作的原因。举个例子,和GCC

代码语言:javascript
运行
复制
__int128 mul(__int128 a, __int128 b) {
    return a*b;
}

生成此程序集

代码语言:javascript
运行
复制
imulq   %rdx, %rsi
movq    %rdi, %rax
imulq   %rdi, %rcx
mulq    %rdx
addq    %rsi, %rcx
addq    %rcx, %rdx

它使用一个64位*64位到128位指令,两个64位*64位来降低64位指令,以及两个64位加法。

票数 18
EN

Stack Overflow用户

发布于 2015-12-12 17:18:31

简单的回答是:不!

更详细地说,SSE寄存器是128位宽的,但不存在将它们视为128位整数的指令。充其量,这些寄存器被视为两个64位(无符号)整数。像加法/...这样的操作可以通过将这两个64位值并行相加并手动处理溢出来构造,但不能使用单个指令。实现这一点可能会变得非常复杂和“丑陋”,看这里:

How can I add together two SSE registers

这将不得不为每个基本操作完成,与使用64位通用寄存器(软件中的“仿真”)实现相比,这些操作可能具有可疑的优势。另一方面,这种SSE方法的一个优点是,一旦它被实现,它也将工作于256位整数(AVX2)和512位整数(AVX512),只需进行较小的修改。

票数 4
EN

Stack Overflow用户

发布于 2021-05-13 10:45:59

RISC-V有一个128b的候选ISA,RV128I。

https://github.com/brucehoult/riscv-meta/blob/master/doc/src/rv128.md

然而,在这一点上,它只是一个架构,它并没有被冻结。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34234407

复制
相关文章

相似问题

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