ストリーミング SIMD 拡張命令 2 の浮動小数点比較操作

比較組み込み関数は、ab の比較を実行します。パックド形式の場合は、ab の 2 つの倍精度浮動小数点値を比較して、128 ビット・マスクを返します。スカラー形式の場合は、ab の下位の倍精度浮動小数点値を比較して、64 ビット・マスクを返します。上位の倍精度浮動小数点値は、a からそのまま渡されます。マスクは、各要素について、比較の結果が真の場合は 0xffffffffffffffff に設定し、偽の場合は 0x0 に設定します。命令名の後の r は、SIMD 命令の実行時にオペランドが逆順にされることを示します。次の表に、ストリーミング SIMD 拡張命令 2 (SSE2) の比較組み込み関数のリストを示します。表の後に、各組み込み関数の説明を示します。

次の表の組み込み関数名をクリックすると、その組み込み関数の詳細が表示されます。

各組み込み関数演算の結果はレジスターに配置されます。ここでは、このレジスターを組み込み関数ごとに R、R0、および R1 を使用して示します。R、R0、および R1 はそれぞれ、レジスターの 1 つの部分を表します。

SSE2 の組み込み関数のプロトタイプは、ヘッダーファイル emmintrin.h 内にあります。

組み込み関数名 操作 対応する SSE2 命令
_mm_cmpeq_pd 等しい CMPEQPD
_mm_cmplt_pd より小さい CMPLTPD
_mm_cmple_pd 以下 CMPLEPD
_mm_cmpgt_pd より大きい CMPLTPDr
_mm_cmpge_pd 以上 CMPLEPDr
_mm_cmpord_pd 順序化可能 CMPORDPD
_mm_cmpunord_pd 順序化不可能 CMPUNORDPD
_mm_cmpneq_pd 等しくない CMPNEQPD
_mm_cmpnlt_pd より小さくない CMPNLTPD
_mm_cmpnle_pd 以下でない CMPNLEPD
_mm_cmpngt_pd より大きくない CMPNLTPDr
_mm_cmpnge_pd 以上でない CMPLEPDr
_mm_cmpeq_sd 等しい CMPEQSD
_mm_cmplt_sd より小さい CMPLTSD
_mm_cmple_sd 以下 CMPLESD
_mm_cmpgt_sd より大きい CMPLTSDr
_mm_cmpge_sd 以上 CMPLESDr
_mm_cmpord_sd 順序化可能 CMPORDSD
_mm_cmpunord_sd 順序化不可能 CMPUNORDSD
_mm_cmpneq_sd 等しくない CMPNEQSD
_mm_cmpnlt_sd より小さくない CMPNLTSD
_mm_cmpnle_sd 以下でない CMPNLESD
_mm_cmpngt_sd より大きくない CMPNLTSDr
_mm_cmpnge_sd 以上でない CMPNLESDr
_mm_comieq_sd 等しい COMISD
_mm_comilt_sd より小さい COMISD
_mm_comile_sd 以下 COMISD
_mm_comigt_sd より大きい COMISD
_mm_comige_sd 以上 COMISD
_mm_comineq_sd 等しくない COMISD
_mm_ucomieq_sd 等しい UCOMISD
_mm_ucomilt_sd より小さい UCOMISD
_mm_ucomile_sd 以下 UCOMISD
_mm_ucomigt_sd より大きい UCOMISD
_mm_ucomige_sd 以上 UCOMISD
_mm_ucomineq_sd 等しくない UCOMISD

 

__m128d _mm_cmpeq_pd(__m128d a, __m128d b)

ab の 2 つの倍精度浮動小数点値が等しいかどうか比較します。

R0 R1
(a0 == b0) ? 0xffffffffffffffff : 0x0 (a1 == b1) ? 0xffffffffffffffff : 0x0

 

__m128d _mm_cmplt_pd(__m128d a, __m128d b)

ab の 2 つの倍精度浮動小数点値について、ab より小さいかどうか比較します。

R0 R1
(a0 < b0) ? 0xffffffffffffffff : 0x0 (a1 < b1) ? 0xffffffffffffffff : 0x0

 

__m128d _mm_cmple_pd(__m128d a, __m128d b)

ab の 2 つの倍精度浮動小数点値について、a が b 以下かどうか比較します。

R0 R1
(a0 <= b0) ? 0xffffffffffffffff : 0x0 (a1 <= b1) ? 0xffffffffffffffff : 0x0

 

__m128d _mm_cmpgt_pd(__m128d a, __m128d b)

ab の 2 つの倍精度浮動小数点値について、ab より大きいかどうか比較します。

R0 R1
(a0 > b0) ? 0xffffffffffffffff : 0x0 (a1 > b1) ? 0xffffffffffffffff : 0x0

 

__m128d _mm_cmpge_pd(__m128d a, __m128d b)

ab の 2 つの倍精度浮動小数点値について、ab 以上かどうか比較します。

R0 R1
(a0 >= b0) ? 0xffffffffffffffff : 0x0 (a1 >= b1) ? 0xffffffffffffffff : 0x0

 

__m128d _mm_cmpord_pd(__m128d a, __m128d b)

ab の 2 つの倍精度浮動小数点値が順序化可能かどうか判定します。

R0 R1
(a0 ord b0) ? 0xffffffffffffffff : 0x0 (a1 ord b1) ? 0xffffffffffffffff : 0x0

 

__m128d _mm_cmpunord_pd(__m128d a, __m128d b)

ab の 2 つの倍精度浮動小数点値が順序化不可能かどうか判定します。

R0 R1
(a0 unord b0) ? 0xffffffffffffffff : 0x0 (a1 unord b1) ? 0xffffffffffffffff : 0x0

 

__m128d _mm_cmpneq_pd ( __m128d a, __m128d b)

ab の 2 つの倍精度浮動小数点値が等しくないかどうか比較します。

R0 R1
(a0 != b0) ? 0xffffffffffffffff : 0x0 (a1 != b1) ? 0xffffffffffffffff : 0x0

 

__m128d _mm_cmpnlt_pd(__m128d a, __m128d b)

ab の 2 つの倍精度浮動小数点値について、ab より小さくないかどうか比較します。

R0 R1
!(a0 < b0) ? 0xffffffffffffffff : 0x0 !(a1 < b1) ? 0xffffffffffffffff : 0x0

 

__m128d _mm_cmpnle_pd(__m128d a, __m128d b)

ab の 2 つの倍精度浮動小数点値について、ab 以下でないかどうか比較します。

R0 R1
!(a0 <= b0) ? 0xffffffffffffffff : 0x0 !(a1 <= b1) ? 0xffffffffffffffff : 0x0

 

__m128d _mm_cmpngt_pd(__m128d a, __m128d b)

ab の 2 つの倍精度浮動小数点値について、ab より大きくないかどうか比較します。

R0 R1
!(a0 > b0) ? 0xffffffffffffffff : 0x0 !(a1 > b1) ? 0xffffffffffffffff : 0x0

 

__m128d _mm_cmpnge_pd(__m128d a, __m128d b)

ab の 2 つの倍精度浮動小数点値について、ab 以上でないかどうか比較します。

R0 R1
!(a0 >= b0) ? 0xffffffffffffffff : 0x0 !(a1 >= b1) ? 0xffffffffffffffff : 0x0

 

__m128d _mm_cmpeq_sd(__m128d a, __m128d b)

ab の下位の倍精度浮動小数点値が等しいかどうか比較します。上位の倍精度浮動小数点値は、a からそのまま渡されます。

R0 R1
(a0 == b0) ? 0xffffffffffffffff : 0x0 a1

 

__m128d _mm_cmplt_sd(__m128d a, __m128d b)

ab の下位の倍精度浮動小数点値について、ab より小さいかどうか比較します。上位の倍精度浮動小数点値は、a からそのまま渡されます。

R0 R1
(a0 < b0) ? 0xffffffffffffffff : 0x0 a1

 

__m128d _mm_cmple_sd(__m128d a, __m128d b)

ab の下位の倍精度浮動小数点値について、ab 以下かどうか比較します。上位の倍精度浮動小数点値は、a からそのまま渡されます。

R0 R1
(a0 <= b0) ? 0xffffffffffffffff : 0x0 a1

 

__m128d _mm_cmpgt_sd(__m128d a, __m128d b)

ab の下位の倍精度浮動小数点値について、ab より大きいかどうか比較します。上位の倍精度浮動小数点値は、a からそのまま渡されます。

R0 R1
(a0 > b0) ? 0xffffffffffffffff : 0x0 a1

 

__m128d _mm_cmpge_sd(__m128d a, __m128d b)

ab の下位の倍精度浮動小数点値について、ab 以上かどうか比較します。上位の倍精度浮動小数点値は、a からそのまま渡されます。

R0 R1
(a0 >= b0) ? 0xffffffffffffffff : 0x0 a1

 

__m128d _mm_cmpord_sd(__m128d a, __m128d b)

ab の下位の倍精度浮動小数点値が順序化可能かどうか判定します。上位の倍精度浮動小数点値は、a からそのまま渡されます。

R0 R1
(a0 ord b0) ? 0xffffffffffffffff : 0x0 a1

 

__m128d _mm_cmpunord_sd(__m128d a, __m128d b)

ab の下位の倍精度浮動小数点値が順序化不可能かどうか判定します。上位の倍精度浮動小数点値は、a からそのまま渡されます。

R0 R1
(a0 unord b0) ? 0xffffffffffffffff : 0x0 a1

 

__m128d _mm_cmpneq_sd(__m128d a, __m128d b)

ab の下位の倍精度浮動小数点値が等しくないかどうか比較します。上位の倍精度浮動小数点値は、a からそのまま渡されます。

R0 R1
(a0 != b0) ? 0xffffffffffffffff : 0x0 a1

 

__m128d _mm_cmpnlt_sd(__m128d a, __m128d b)

ab の下位の倍精度浮動小数点値について、ab より小さくないかどうか比較します。上位の倍精度浮動小数点値は、a からそのまま渡されます。

R0 R1
!(a0 < b0) ? 0xffffffffffffffff : 0x0 a1

 

__m128d _mm_cmpnle_sd(__m128d a, __m128d b)

ab の下位の倍精度浮動小数点値について、ab 以下でないかどうか比較します。上位の倍精度浮動小数点値は、a からそのまま渡されます。

R0 R1
!(a0 <= b0) ? 0xffffffffffffffff : 0x0

a1

 

__m128d _mm_cmpngt_sd(__m128d a, __m128d b)

ab の下位の倍精度浮動小数点値について、ab より大きくないかどうか比較します。上位の倍精度浮動小数点値は、a からそのまま渡されます。

R0 R1
!(a0 > b0) ? 0xffffffffffffffff : 0x0 a1

 

__m128d _mm_cmpnge_sd(__m128d a, __m128d b)

ab の下位の倍精度浮動小数点値について、ab 以上でないかどうか比較します。上位の倍精度浮動小数点値は、a からそのまま渡されます。

R0 R1
!(a0 >= b0) ? 0xffffffffffffffff : 0x0 a1

 

int _mm_comieq_sd(__m128d a, __m128d b)

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

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

 

int _mm_comilt_sd(__m128d a, __m128d b)

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

R
(a0 < b0) ? 0x1 : 0x0

 

int _mm_comile_sd(__m128d a, __m128d b)

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

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

 

int _mm_comigt_sd(__m128d a, __m128d b)

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

R
(a0 > b0) ? 0x1 : 0x0

 

int _mm_comige_sd(__m128d a, __m128d b)

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

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

 

int _mm_comineq_sd(__m128d a, __m128d b)

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

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

 

int _mm_ucomieq_sd(__m128d a, __m128d b)

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

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

 

int _mm_ucomilt_sd(__m128d a, __m128d b)

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

R
(a0 < b0) ? 0x1 : 0x0

 

int _mm_ucomile_sd(__m128d a, __m128d b)

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

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

 

int _mm_ucomigt_sd(__m128d a, __m128d b)

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

R
(a0 > b0) ? 0x1 : 0x0

 

int _mm_ucomige_sd(__m128d a, __m128d b)

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

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

 

int _mm_ucomineq_sd(__m128d a, __m128d b)

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

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