VFIXUPIMMPD - FIX UP IMMediate Packed Double

VFIXUPIMMPD xmm1{k1}{z}, xmm2, xmm3/m128/m64bcst, imm8    (V5+VL
__m128d _mm_fixupimm_pd(__m128d a, __m128d b, __m128i c, int imm8);
__m128d _mm_mask_fixupimm_pd(__m128d a, __mmask8 k, __m128d b, __m128i c, int imm8);
__m128d _mm_maskz_fixupimm_pd(__mmask8 k, __m128d a, __m128d b, __m128i c, int imm8);


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


②のdoubleの値によって③のテーブルを引き③のテーブルで指示された値を第一オペランド(戻り値)に返す
VFIXUPIMMPD zmm1{k1}{z}, zmm2, zmm3/m512/m64bcst{sae}, imm8    (V5
__m512d _mm512_fixupimm_pd(__m512d a, __m512d b, __m512i c, int imm8);
__m512d _mm512_mask_fixupimm_pd(__m512d a, __mmask8 k, __m512d b, __m512i c, int imm8);
__m512d _mm512_maskz_fixupimm_pd(__mmask8 k, __m512d a, __m512d b, __m512i c, int imm8);
__m512d _mm512_fixupimm_round_pd(__m512d a, __m512d b, __m512i c, int imm8, int sae);
__m512d _mm512_mask_fixupimm_round_pd(__m512d a, __mmask8 k, __m512d b, __m512i c, int imm8, int sae);
__m512d _mm512_maskz_fixupimm_round_pd(__mmask8 k, __m512d a, __m512d b, __m512i c, int imm8, int sae);


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

③のテーブル

各QWORDの下位32ビットで下記のものを指定する。

ビット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 double最大値
1111 -double最大値

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命令一覧表  フィードバック