我们是否仍然需要在软件中模拟128位整数,或者现在您的普通桌面处理器中是否有对它们的硬件支持?
发布于 2015-12-12 20:37:59
x86-64指令集可以使用一条指令执行64位*64位到128位(无符号imul为mul,有符号imul为每个有一个操作数),因此我认为在某种程度上,x86指令集确实包括对128位整数的一些支持。
如果您的指令集没有执行64位*64位到128位的指令,那么您需要several instructions to emulate this。
这就是为什么使用x86-64只需很少的指令就可以完成128位*128位到低128位的操作的原因。举个例子,和GCC
__int128 mul(__int128 a, __int128 b) {
return a*b;
}生成此程序集
imulq %rdx, %rsi
movq %rdi, %rax
imulq %rdi, %rcx
mulq %rdx
addq %rsi, %rcx
addq %rcx, %rdx它使用一个64位*64位到128位指令,两个64位*64位来降低64位指令,以及两个64位加法。
发布于 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),只需进行较小的修改。
发布于 2021-05-13 10:45:59
RISC-V有一个128b的候选ISA,RV128I。
https://github.com/brucehoult/riscv-meta/blob/master/doc/src/rv128.md
然而,在这一点上,它只是一个架构,它并没有被冻结。
https://stackoverflow.com/questions/34234407
复制相似问题