【发布时间】:2013-04-28 06:23:12
【问题描述】:
GCC 和 Clang 具有用于 128 位整数运算的 __int128_t 和 __uint128_t 扩展。
I was hopeful__m128i 会为英特尔 C 编译器提供类似的功能,但是(如果可能的话)在我看来,我必须编写显式的 SSE2 函数调用才能使用__m128i,而不是使用“内置”运算符,如 +、-、*、/ 和 %。我希望做这样的事情(这不起作用):
#if defined(__INTEL_COMPILER) && defined(__SSE2__)
#include "xmmintrin.h"
typedef __u128 uint128_t;
#elif defined (__GNUC__)
typedef __uint128_t uint128_t;
#else
#error For 128-bit arithmetic we need GCC or ICC, or uint128_t
#endif
是否有 128 位整数支持运算符 +、-、*、/ 和 % 埋在 icc 的某个地方?
【问题讨论】:
-
我正在使用 icc (ICC) 12.0.0 20101006,但我会对任何版本的 icc 感兴趣。我也对其他支持此功能的 linux 的 C 编译器感兴趣。
-
这个问题的答案几乎肯定是“不”。我只是cross-posted to the Intel Developer Forum。
-
MMX、SSE 及其后继者旨在一次用于多个值,而不是用于 128 位数字。我认为未来 256 位 AVX/AVX2 甚至 AVX-512 中都没有 128 位数学指令。如果您需要 128 位数学,请使用库或自己构建
-
@LưuVĩnhPhúc,是的,你是对的。我去年问过a question。此外,there is no C compiler besides GCC 似乎支持 OpenMP,并且可以直接替代
__int128_t和__uint128_t。