我想仅使用 SSE2指令将 32 位无符号整数钳制为固定值 (0x10000)。
基本上,这个 C 代码:
if (c>0x10000) c=0x10000;
下面的代码有效,但我想知道是否可以简化它,考虑到它是一个特定的常量(0xFFFF+0x0001)
movdqa xmm3, xmm0 <-- xmm0 contains 4 dword unsigned values
movdqa xmm4, xmm5 <-- xmm5: four dword 0x10000 values
pxor xmm3, xmm5
pcmpgtd xmm4, xmm0
psrad xmm3, 31
pxor xmm4, xmm3
pand xmm0, xmm4
pandn xmm4, xmm5
por xmm0, xmm4
Run Code Online (Sandbox Code Playgroud)
的值c在 0x00000000-0xFFFFFFFF 范围内,但假设它在 0x00000000-0x00FFFFFF 或 0x00000000-0x00FF0000 范围内的代码可能是可接受的。