小编San*_*yin的帖子

使用 SSE2 将 unsigned int 钳位为 0x10000

我想仅使用 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 范围内的代码可能是可接受的。

x86 assembly simd sse2 clamp

6
推荐指数
3
解决办法
253
查看次数

标签 统计

assembly ×1

clamp ×1

simd ×1

sse2 ×1

x86 ×1