比較演算子

この節では、単精度浮動小数点値であるABを比較する演算子について説明します。Fvecクラスのオブジェクト同士を比較した場合は、比較されたオブジェクトと同じクラスで戻り値が返ってきます。

次の表は、Fvecクラスの比較演算子を示したものです。

比較演算子と対応する組込み関数

比較の条件 演算子 構文

等しい

cmpeq

R = cmpeq(A, B)

等しくない

cmpneq

R = cmpneq(A, B)

より大きい

cmpgt

R = cmpgt(A, B)

cmpge

R = cmpge(A, B)

より大きくない

cmpngt

R = cmpngt(A, B)

≧ではない

cmpnge

R = cmpnge(A, B)

より小さい

cmplt

R = cmplt(A, B)

cmple

R = cmple(A, B)

より小さくない

cmpnlt

R = cmpnlt(A, B)

≦ではない

cmpnle

R = cmpnle(A, B)

比較演算子

比較した結果が真の場合、そのマスクは浮動小数点値ごとに0xffffffffにセットされます。 同様に、偽の場合は0x00000000にセットされます。次の表は比較演算子のクラスごとの戻り値を示したものです。 各戻り値の表記は、「戻り値の表記法」の節の前半に述べた表記法に従っています。

比較演算子の戻り値の対応表

R A0 演算子 B 真の場合 偽の場合 F32vec4 F64vec2 F32vec1

R0:=

(A1

!(A1

cmp[eq | lt | le | gt | ge]
cmp[ne | nlt | nle | ngt | nge]

B1)
B1)

0xffffffff

0x0000000

X

X

X

R1:=

(A1

!(A1

cmp[eq | lt | le | gt | ge]
cmp[ne | nlt | nle | ngt | nge]

B2)
B2)

0xffffffff

0x0000000

 

X

X

非対応

R2:=

(A1

!(A1

cmp[eq | lt | le | gt | ge]
cmp[ne | nlt | nle | ngt | nge]

B3)
B3)

0xffffffff

0x0000000

 

X

非対応

非対応

R3:=

A3

cmp[eq | lt | le | gt | ge]
cmp[ne | nlt | nle | ngt | nge]

B3)
B3)

0xffffffff

0x0000000

 

X

非対応

非対応

次の表に、比較演算と組込み関数の例をいくつか示します。

Fvecクラスの比較演算

戻り値 構文の使用例 組込み関数
「=」かどうかの比較

floatが4個

F32vec4 R = cmpeq(F32vec4 A);

_mm_cmpeq_ps

doubleが2個

F64vec2 R = cmpeq(F64vec2 A);

_mm_cmpeq_pd

floatが1個

F32vec1 R = cmpeq(F32vec1 A);

_mm_cmpeq_ss

「≠」かどうかの比較

floatが4個

F32vec4 R = cmpneq(F32vec4 A);

_mm_cmpneq_ps

doubleが2個

F64vec2 R = cmpneq(F64vec2 A);

_mm_cmpneq_pd

floatが1個

F32vec1 R = cmpneq(F32vec1 A);

_mm_cmpneq_ss

「<」かどうかの比較

floatが4個

F32vec4 R = cmplt(F32vec4 A);

_mm_cmplt_ps

doubleが2個

F64vec2 R = cmplt(F64vec2 A);

_mm_cmplt_pd

floatが1個

F32vec1 R = cmplt(F32vec1 A);

_mm_cmplt_ss

「≦」かどうかの比較

floatが4個

F32vec4 R = cmple(F32vec4 A);

_mm_cmple_ps

doubleが2個

F64vec2 R = cmple(F64vec2 A);

_mm_cmple_pd

floatが1個

F32vec1 R = cmple(F32vec1 A);

_mm_cmple_pd

「>」かどうかの比較

floatが4個

F32vec4 R = cmpgt(F32vec4 A);

_mm_cmpgt_ps

doubleが2個

F64vec2 R = cmpgt(F32vec42 A);

_mm_cmpgt_pd

floatが1個

F32vec1 R = cmpgt(F32vec1 A);

_mm_cmpgt_ss

「≧」かどうかの比較

floatが4個

F32vec4 R = cmpge(F32vec4 A);

_mm_cmpge_ps

doubleが2個

F64vec2 R = cmpge(F64vec2 A);

_mm_cmpge_pd

floatが1個

F32vec1 R = cmpge(F32vec1 A);

_mm_cmpge_ss

「<ではない」かどうかの比較

floatが4個

F32vec4 R = cmpnlt(F32vec4 A);

_mm_cmpnlt_ps

doubleが2個

F64vec2 R = cmpnlt(F64vec2 A);

_mm_cmpnlt_pd

floatが1個

F32vec1 R = cmpnlt(F32vec1 A);

_mm_cmpnlt_ss

「≦ではない」かどうかの比較

floatが4個

F32vec4 R = cmpnle(F32vec4 A);

_mm_cmpnle_ps

doubleが2個

F64vec2 R = cmpnle(F64vec2 A);

_mm_cmpnle_pd

floatが1個

F32vec1 R = cmpnle(F32vec1 A);

_mm_cmpnle_ss

「>ではない」かどうかの比較

floatが4個

F32vec4 R = cmpngt(F32vec4 A);

_mm_cmpngt_ps

doubleが2個

F64vec2 R = cmpngt(F64vec2 A);

_mm_cmpngt_pd

floatが1個

F32vec1 R = cmpngt(F32vec1 A);

_mm_cmpngt_ss

「≧ではない」かどうかの比較

floatが4個

F32vec4 R = cmpnge(F32vec4 A);

_mm_cmpnge_ps

doubleが2個

F64vec2 R = cmpnge(F64vec2 A);

_mm_cmpnge_pd

floatが1個

F32vec1 R = cmpnge(F32vec1 A);

_mm_cmpnge_ss