我听说__int128_tGCC提供的128位整数数据类型 是模拟的,因此很慢.不过,据我所知,各种SSE指令集(SSE,SSE2,...,AVX)推出了128位寄存器至少一些指令.我不太了解SSE或汇编/机器代码,所以我想知道是否有人可以向我解释是否__int128_t使用现代版本的GCC模拟算术运算.
我问这个的原因是因为我想知道__int128_t在不同版本的GCC之间是否期望性能差异是有意义的,这取决于SSE指令的优势.
那么,__int128_tGCC会模拟哪些算术部分,以及哪些部分是用SSE指令实现的(如果有的话)?
在x86上实现bignums时,显然数字大小的最有效选择是32位.但是,您需要算术最多两倍的数字大小(即32 + 32 = 33,32*32 = 64,64/32 = 32).幸运的是,x86不仅提供了这一功能,而且还可以从便携式C(uint64_t)访问它.
类似地,在x64上,希望使用64位数字.这将需要128位算术(即64 + 64 = 65,64*64 = 128,128/64 = 64).幸运的是,x64提供了这个功能.不幸的是,它无法通过便携式C接入,但很明显可以进入组装.
所以我的问题是它是否可从非便携式C访问.X64上的任何C编译器是否提供对此的访问,如果是,那么语法是什么?
(注意,我不是在谈论128位向量,它们被严格地视为32或64位字的集合,它们之间没有进位传播,但是关于实际的128位整数运算.)