ストリーミング SIMD 拡張命令の比較操作

比較組込み関数は、abの比較を実行します。パックド形式では、abの4個の単精度浮動小数点値を比較して、128ビット・マスクを返します。スカラ形式では、abの最下位の単精度浮動小数点値を比較して、32ビット・マスクを返します。 上位3個の単精度浮動小数点値は、aからそのまま渡されます。マスクは、各要素について、比較の結果が真の場合は0xffffffffに設定し、偽の場合は0x0に設定されます。

ストリーミングSIMD拡張命令の組込み関数のプロトタイプは、ヘッダ・ファイルxmmintrin.h内にあります。

組込み関数名 比較条件 対応する命令
_mm_cmpeq_ss 等しい CMPEQSS
_mm_cmpeq_ps 等しい CMPEQPS
_mm_cmplt_ss より小さい CMPLTSS
_mm_cmplt_ps より小さい CMPLTPS
_mm_cmple_ss より小さいか等しい CMPLESS
_mm_cmple_ps より小さいか等しい CMPLEPS
_mm_cmpgt_ss より大きい CMPLTSS
_mm_cmpgt_ps より大きい CMPLTPS
_mm_cmpge_ss より大きいか等しい CMPLESS
_mm_cmpge_ps より大きいか等しい CMPLEPS
_mm_cmpneq_ss 等しくない CMPNEQSS
_mm_cmpneq_ps 等しくない CMPNEQPS
_mm_cmpnlt_ss より小さくない CMPNLTSS
_mm_cmpnlt_ps より小さくない CMPNLTPS
_mm_cmpnle_ss より小さくなく等しくない CMPNLESS
_mm_cmpnle_ps より小さくなく等しくない CMPNLEPS
_mm_cmpngt_ss より大きくない CMPNLTSS
_mm_cmpngt_ps より大きくない CMPNLTPS
_mm_cmpnge_ss より大きくなく等しくない CMPNLESS
_mm_cmpnge_ps より大きくなく等しくない CMPNLEPS
_mm_cmpord_ss 順序化可能 CMPORDSS
_mm_cmpord_ps 順序化可能 CMPORDPS
_mm_cmpunord_ss 順序化不可能 CMPUNORDSS
_mm_cmpunord_ps 順序化不可能 CMPUNORDPS
_mm_comieq_ss 等しい COMISS
_mm_comilt_ps

より小さい

COMISS
_mm_comile_ss より小さいか等しい COMISS
_mm_comigt_ss より大きい COMISS
_mm_comige_ss より大きいか等しい COMISS
_mm_comineq_ss 等しくない COMISS
_mm_ucomieq_ss 等しい UCOMISS
_mm_ucomilt_ss

より小さい

UCOMISS
_mm_ucomile_ss より小さいか等しい UCOMISS
_mm_ucomigt_ss より大きい UCOMISS
_mm_ucomige_ss より大きいか等しい UCOMISS
_mm_ucomineq_ss 等しくない UCOMISS
 

__m128 _mm_cmpeq_ss(__m128 a, __m128 b)

等しいかどうか比較します。

r0 := (a0 == b0) ? 0xffffffff : 0x0
r1 := a1 ; r2 := a2 ; r3 := a3

__m128 _mm_cmpeq_ps(__m128 a, __m128 b)

等しいかどうか比較します。

r0 := (a0 == b0) ? 0xffffffff : 0x0
r1 := (a1 == b1) ? 0xffffffff : 0x0

r2 := (a2 == b2) ? 0xffffffff : 0x0

r3 := (a3 == b3) ? 0xffffffff : 0x0

__m128 _mm_cmplt_ss(__m128 a, __m128 b)

より小さいかどうか比較します。

r0 := (a0 < b0) ? 0xffffffff : 0x0
r1 := a1 ; r2 := a2 ; r3 := a3

__m128 _mm_cmplt_ps (__m128 a, __m128 b)

より小さいかどうか比較します。

r0 := (a0 < b0) ? 0xffffffff : 0x0
r1 := (a1 < b1) ? 0xffffffff : 0x0

r2 := (a2 < b2) ? 0xffffffff : 0x0

r3 := (a3 < b3) ? 0xffffffff : 0x0

__m128 _mm_cmple_ss(__m128 a, __m128 b)

より小さいか等しいかどうか比較します。

r0 := (a0 <= b0) ? 0xffffffff : 0x0
r1 := a1 ; r2 := a2 ; r3 := a3

__m128 _mm_cmple_ps(__m128 a, __m128 b)

より小さいか等しいかどうか比較します。

r0 := (a0 <= b0) ? 0xffffffff : 0x0
r1 := (a1 <= b1) ? 0xffffffff : 0x0

r2 := (a2 <= b2) ? 0xffffffff : 0x0

r3 := (a3 <= b3) ? 0xffffffff : 0x0

__m128 _mm_cmpgt_ss(__m128 a, __m128 b)

より大きいかどうか比較します。

r0 := (a0 > b0) ? 0xffffffff : 0x0
r1 := a1 ; r2 := a2 ; r3 := a3

__m128 _mm_cmpgt_ps(__m128 a, __m128 b)

より大きいかどうか比較します。

r0 := (a0 > b0) ? 0xffffffff : 0x0
r1 := (a1 > b1) ? 0xffffffff : 0x0

r2 := (a2 > b2) ? 0xffffffff : 0x0

r3 := (a3 > b3) ? 0xffffffff : 0x0

__m128 _mm_cmpge_ss(__m128 a, __m128 b)

より大きいか等しいかどうか比較します。

r0 := (a0 >= b0) ? 0xffffffff : 0x0
r1 := a1 ; r2 := a2 ; r3 := a3

__m128 _mm_cmpge_ps(__m128 a, __m128 b)

より大きいか等しいかどうか比較します。

r0 := (a0 >= b0) ? 0xffffffff : 0x0
r1 := (a1 >= b1) ? 0xffffffff : 0x0

r2 := (a2 >= b2) ? 0xffffffff : 0x0

r3 := (a3 >= b3) ? 0xffffffff : 0x0

__m128 _mm_cmpneq_ss(__m128 a, __m128 b)

等しくないかどうか比較します。

r0 := (a0 != b0) ? 0xffffffff : 0x0
r1 := a1 ; r2 := a2 ; r3 := a3

__m128 _mm_cmpneq_ps(__m128 a, __m128 b)

等しくないかどうか比較します。

r0 := (a0 != b0) ? 0xffffffff : 0x0
r1 := (a1 != b1) ? 0xffffffff : 0x0

r2 := (a2 != b2) ? 0xffffffff : 0x0

r3 := (a3 != b3) ? 0xffffffff : 0x0

__m128 _mm_cmpnlt_ss(__m128 a, __m128 b)

より小さくないかどうか比較します。

r0 := !(a0 < b0) ? 0xffffffff : 0x0
r1 := a1 ; r2 := a2 ; r3 := a3

__m128 _mm_cmpnlt_ps(__m128 a, __m128 b)

より小さくないかどうか比較します。

r0 := !(a0 < b0) ? 0xffffffff : 0x0
r1 := !(a1 < b1) ? 0xffffffff : 0x0

r2 := !(a2 < b2) ? 0xffffffff : 0x0

r3 := !(a3 < b3) ? 0xffffffff : 0x0

__m128 _mm_cmpnle_ss(__m128 a, __m128 b)

より小さくなく等しくないかどうか比較します。

r0 := !(a0 <= b0) ? 0xffffffff : 0x0
r1 := a1 ; r2 := a2 ; r3 := a3

__m128 _mm_cmpnle_ps(__m128 a, __m128 b)

より小さくなく等しくないかどうか比較します。

r0 := !(a0 <= b0) ? 0xffffffff : 0x0
r1 := !(a1 <= b1) ? 0xffffffff : 0x0

r2 := !(a2 <= b2) ? 0xffffffff : 0x0

r3 := !(a3 <= b3) ? 0xffffffff : 0x0

__m128 _mm_cmpngt_ss(__m128 a, __m128 b)

より大きくないかどうか比較します。

r0 := !(a0 > b0) ? 0xffffffff : 0x0
r1 := a1 ; r2 := a2 ; r3 := a3

__m128 _mm_cmpngt_ps(__m128 a, __m128 b)

より大きくないかどうか比較します。

r0 := !(a0 > b0) ? 0xffffffff : 0x0
r1 := !(a1 > b1) ? 0xffffffff : 0x0

r2 := !(a2 > b2) ? 0xffffffff : 0x0

r3 := !(a3 > b3) ? 0xffffffff : 0x0

__m128 _mm_cmpnge_ss(__m128 a, __m128 b)

より大きくなく等しくないかどうか比較します。

r0 := !(a0 >= b0) ? 0xffffffff : 0x0
r1 := a1 ; r2 := a2 ; r3 := a3

__m128 _mm_cmpnge_ps(__m128 a, __m128 b)

より大きくなく等しくないかどうか比較します。

r0 := !(a0 >= b0) ? 0xffffffff : 0x0
r1 := !(a1 >= b1) ? 0xffffffff : 0x0

r2 := !(a2 >= b2) ? 0xffffffff : 0x0

r3 := !(a3 >= b3) ? 0xffffffff : 0x0

__m128 _mm_cmpord_ss(__m128 a, __m128 b)

順序化可能かどうか判定します。

r0 := (a0 ord? b0) ? 0xffffffff : 0x0
r1 := a1 ; r2 := a2 ; r3 := a3

__m128 _mm_cmpord_ps(__m128 a, __m128 b)

順序化可能かどうか判定します。

r0 := (a0 ord? b0) ? 0xffffffff : 0x0
r1 := (a1 ord? b1) ? 0xffffffff : 0x0

r2 := (a2 ord? b2) ? 0xffffffff : 0x0

r3 := (a3 ord? b3) ? 0xffffffff : 0x0

__m128 _mm_cmpunord_ss(__m128 a, __m128 b)

順序化不可能かどうか判定します。

r0 := (a0 unord? b0) ? 0xffffffff : 0x0
r1 := a1 ; r2 := a2 ; r3 := a3

__m128 _mm_cmpunord_ps(__m128 a, __m128 b)

順序化不可能かどうか判定します。

r0 := (a0 unord? b0) ? 0xffffffff : 0x0
r1 := (a1 unord? b1) ? 0xffffffff : 0x0

r2 := (a2 unord? b2) ? 0xffffffff : 0x0

r3 := (a3 unord? b3) ? 0xffffffff : 0x0

int _mm_comieq_ss(__m128 a, __m128 b)

abの最下位の単精度浮動小数点値について、abが等しいかどうか比較します。abが等しい場合は、1を返します。それ以外の場合は、0を返します。

r := (a0 == b0) ? 0x1 : 0x0

int _mm_comilt_ss(__m128 a, __m128 b)

abの最下位の単精度浮動小数点値について、abより小さいかどうか比較します。abより小さい場合は、1を返します。それ以外の場合は、0を返します。

r := (a0 < b0) ? 0x1 : 0x0

int _mm_comile_ss(__m128 a, __m128 b)

abの最下位の単精度浮動小数点値について、abより小さいか等しいかどうか比較します。abより小さいか等しい場合は、1を返します。それ以外の場合は、0を返します。

r := (a0 <= b0) ? 0x1 : 0x0

int _mm_comigt_ss(__m128 a, __m128 b)

abの最下位の単精度浮動小数点値について、abより大きいかどうか比較します。abより大きい場合は、1を返します。それ以外の場合は、0を返します。

r := (a0 > b0) ? 0x1 : 0x0

int _mm_comige_ss(__m128 a, __m128 b)

abの最下位の単精度浮動小数点値について、abより大きいか等しいかどうか比較します。abより大きいか等しい場合は、1を返します。それ以外の場合は、0を返します。

r := (a0 >= b0) ? 0x1 : 0x0

int _mm_comineq_ss(__m128 a, __m128 b)

abの最下位の単精度浮動小数点値について、abが等しくないかどうか比較します。abが等しくない場合は、1を返します。それ以外の場合は、0を返します。

r := (a0 != b0) ? 0x1 : 0x0

int _mm_ucomieq_ss(__m128 a, __m128 b)

abの最下位の単精度浮動小数点値について、abが等しいかどうか比較します。abが等しい場合は、1を返します。それ以外の場合は、0を返します。

r := (a0 == b0) ? 0x1 : 0x0

int _mm_ucomilt_ss(__m128 a, __m128 b)

abの最下位の単精度浮動小数点値について、abより小さいかどうか比較します。abより小さい場合は、1を返します。それ以外の場合は、0を返します。

r := (a0 < b0) ? 0x1 : 0x0

int _mm_ucomile_ss(__m128 a, __m128 b)

abの最下位の単精度浮動小数点値について、abより小さいか等しいかどうか比較します。abより小さいか等しい場合は、1を返します。それ以外の場合は、0を返します。

r := (a0 <= b0) ? 0x1 : 0x0

int _mm_ucomigt_ss(__m128 a, __m128 b)

abの最下位の単精度浮動小数点値について、abより大きいかどうか比較します。abより大きいか等しい場合は、1を返します。それ以外の場合は、0を返します。

r := (a0 > b0) ? 0x1 : 0x0

int _mm_ucomige_ss(__m128 a, __m128 b)

abの最下位の単精度浮動小数点値について、abより大きいか等しいかどうか比較します。abより大きいか等しい場合は、1を返します。それ以外の場合は、0を返します。

r := (a0 >= b0) ? 0x1 : 0x0

int _mm_ucomineq_ss(__m128 a, __m128 b)

abの最下位の単精度浮動小数点値について、abが等しくないかどうか比較します。abが等しくない場合は、1を返します。それ以外の場合は、0を返します。

r := (a0 != b0) ? 0x1 : 0x0