_mm512_fixupimm_round_pd
Classification
AVX-512, Miscellaneous, CPUID Test: AVX512F
Header File
immintrin.h
Instruction
VFIXUPIMMPD zmm, zmm, zmm, imm8 {sae}
Synopsis
 _mm512_fixupimm_round_pd(__m512d a, __m512d b, __m512i c, int imm8, int sae);
Description
Fix up packed double-precision (64-bit) floating-point elements in "a" and "b" using packed 64-bit integers in "c", and store the results in "dst". "imm8" is used to set the required flags reporting. [sae_note]
Operation
enum TOKEN_TYPE {
	QNAN_TOKEN := 0, \
	SNAN_TOKEN := 1, \
	ZERO_VALUE_TOKEN := 2, \
	ONE_VALUE_TOKEN := 3, \
	NEG_INF_TOKEN := 4, \
	POS_INF_TOKEN := 5, \
	NEG_VALUE_TOKEN := 6, \
	POS_VALUE_TOKEN := 7
}
DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
	tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
	CASE(tsrc[63:0]) OF
	QNAN_TOKEN:j := 0
	SNAN_TOKEN:j := 1
	ZERO_VALUE_TOKEN: j := 2
	ONE_VALUE_TOKEN: j := 3
	NEG_INF_TOKEN: j := 4
	POS_INF_TOKEN: j := 5
	NEG_VALUE_TOKEN: j := 6
	POS_VALUE_TOKEN: j := 7
	ESAC
	
	token_response[3:0] := src3[3+4*j:4*j]
	
	CASE(token_response[3:0]) OF
	0 : dest[63:0] := src1[63:0]
	1 : dest[63:0] := tsrc[63:0]
	2 : dest[63:0] := QNaN(tsrc[63:0])
	3 : dest[63:0] := QNAN_Indefinite
	4 : dest[63:0] := -INF
	5 : dest[63:0] := +INF
	6 : dest[63:0] := tsrc.sign? -INF : +INF
	7 : dest[63:0] := -0
	8 : dest[63:0] := +0
	9 : dest[63:0] := -1
	10: dest[63:0] := +1
	11: dest[63:0] := 1/2
	12: dest[63:0] := 90.0
	13: dest[63:0] := PI/2
	14: dest[63:0] := MAX_FLOAT
	15: dest[63:0] := -MAX_FLOAT
	ESAC
	
	CASE(tsrc[31:0]) OF
	ZERO_VALUE_TOKEN:
		IF (imm8[0]) #ZE; FI
	ZERO_VALUE_TOKEN:
		IF (imm8[1]) #IE; FI
	ONE_VALUE_TOKEN:
		IF (imm8[2]) #ZE; FI
	ONE_VALUE_TOKEN:
		IF (imm8[3]) #IE; FI
	SNAN_TOKEN:
		IF (imm8[4]) #IE; FI
	NEG_INF_TOKEN:
		IF (imm8[5]) #IE; FI
	NEG_VALUE_TOKEN:
		IF (imm8[6]) #IE; FI
	POS_INF_TOKEN:
		IF (imm8[7]) #IE; FI
	ESAC
	RETURN dest[63:0]
}
FOR j := 0 to 7
	i := j*64
	dst[i+63:i] := FIXUPIMMPD(a[i+63:i], b[i+63:i], c[i+63:i], imm8[7:0])
ENDFOR
dst[MAX:512] := 0