unsigned char同士の演算で負の場合0になるSSE命令は?
結論だけ先に言うと、unsigned char(8bit)同士の演算で「負になったら 0 に飽和する」SSE 命令は存在します。 それは SSE2 の saturating subtract for unsigned bytes:
PSUBUSB(Packed SUBtract Unsigned Saturate Bytes) → 8bit の unsigned subtract で、結果が負になる場合 0 に飽和する。
🔍 なぜ PSUBUSB が該当するのか
SSE2 には「飽和演算(saturating arithmetic)」があり、特に unsigned byte に対しては:
PSUBUSB:
a - bが負なら 0 に clampPADDUSB:
a + bが 255 を超えたら 255 に clamp
あなたの質問は「unsigned char 同士の演算で負の場合 0 になる SSE 命令」なので、 まさに PSUBUSB がそのものです。
🧠 補足:Intel の saturating arithmetic の仕様
検索結果(Arm の saturating arithmetic の一般仕様)では:
unsigned saturating operation では、結果が negative なら 0 になる
と説明されています。 x86 SSE2 でも同じ概念があり、unsigned byte subtract の saturating 版が PSUBUSB です。
📌 使用例(C/C++ intrinsics)
cpp
#include <emmintrin.h>
__m128i a = _mm_set1_epi8(10);
__m128i b = _mm_set1_epi8(20);
// 10 - 20 = -10 → saturate to 0
__m128i r = _mm_subs_epu8(a, b);
_mm_subs_epu8 が PSUBUSB に対応します。
0 件のコメント:
コメントを投稿