VFIXUPIMMPS - FIX UP IMMediate Packed Single

VFIXUPIMMPS xmm1{k1}{z}, xmm2, xmm3/m128/m32bcst, imm8    (V5+VL
__m128 _mm_fixupimm_ps(__m128 a, __m128 b, __m128i c, int imm8);
__m128 _mm_mask_fixupimm_ps(__m128 a, __mmask8 k, __m128 b, __m128i c, int imm8);
__m128 _mm_maskz_fixupimm_ps(__mmask8 k, __m128 a, __m128 b, __m128i c, int imm8);


②のfloatの値によって③のテーブルを引き③のテーブルで指示された値を第一オペランド(戻り値)に返す
VFIXUPIMMPS ymm1{k1}{z}, ymm2, ymm3/m256/m32bcst, imm8    (V5+VL
__m256 _mm256_fixupimm_ps(__m256 a, __m256 b, __m256i c, int imm8);
__m256 _mm256_mask_fixupimm_ps(__m256 a, __mmask8 k, __m256 b, __m256i c, int imm8);
__m256 _mm256_maskz_fixupimm_ps(__mmask8 k, __m256 a, __m256 b, __m256i c, int imm8);


②のfloatの値によって③のテーブルを引き③のテーブルで指示された値を第一オペランド(戻り値)に返す
VFIXUPIMMPS zmm1{k1}{z}, zmm2, zmm3/m512/m32bcst{sae}, imm8    (V5
__m512 _mm512_fixupimm_ps(__m512 a, __m512 b, __m512i c, int imm8);
__m512 _mm512_mask_fixupimm_ps(__m512 a, __mmask16 k, __m512 b, __m512i c, int imm8);
__m512 _mm512_maskz_fixupimm_ps(__mmask16 k, __m512 a, __m512 b, __m512i c, int imm8);
__m512 _mm512_fixupimm_round_ps(__m512 a, __m512 b, __m512i c, int imm8, int sae);
__m512 _mm512_mask_fixupimm_round_ps(__m512 a, __mmask16 k, __m512 b, __m512i c, int imm8, int sae);
__m512 _mm512_maskz_fixupimm_round_ps(__mmask16 k, __m512 a, __m512 b, __m512i c, int imm8, int sae);


②のfloatの値によって③のテーブルを引き③のテーブルで指示された値を第一オペランド(戻り値)に返す

③のテーブル

各DWORDで下記のものを指定する。

ビット3:0 ②の値がQNaNのときに返すものを下の16択テーブルから指定する
ビット7:4 ②の値がSNaNのときに返すものを下の16択テーブルから指定する
ビット11:8 ②の値が0のときに返すものを下の16択テーブルから指定する
ビット15:12 ②の値が+1のときに返すものを下の16択テーブルから指定する
ビット19:16 ②の値がマイナス無限大のときに返すものを下の16択テーブルから指定する
ビット23:20 ②の値がプラス無限大のときに返すものを下の16択テーブルから指定する
ビット27:24 ②の値が負のときに返すものを下の16択テーブルから指定する
ビット31:28 ②の値が正のときに返すものを下の16択テーブルから指定する

0000 ①の値
0001 ②の値
0010 QNaN(②)
0011 QNaN_Indefinite
0100 -無限大
0101 +無限大
0110 ②の符号と同じ符号の無限大
0111 -0
1000 +0
1001 -1
1010 +1
1011 0.5
1100 90.0
1101 π/2
1110 float最大値
1111 -float最大値

imm8の以下のビットをセットすると、②にその値が含まれているときMXCSRのIE、ZEが立つ

ビット7 +無限大→IE
ビット6 負→IE
ビット5 -無限大→IE
ビット4 SNaN→IE
ビット3 1→IE
ビット2 1→ZE
ビット1 0→IE
ビット0 0→ZE

x86/x64 SIMD命令一覧表  フィードバック