image/svg+xmlVFIXUPIMMPS—Fix Up Special Packed Float32 ValuesInstruction Operand EncodingDescriptionPerform fix-up of doubleword elements encoded in single-precision floating-point format in the first source operand (the second operand) using a 32-bit, two-level look-up table specified in the corresponding doubleword element of the second source operand (the third operand) with exception reporting specifier imm8. The elements that are fixed-up are selected by mask bits of 1 specified in the opmask k1. Mask bits of 0 in the opmask k1 or table response action of 0000b preserves the corresponding element of the first operand. The fixed-up elements from the first source operand and the preserved element in the first operand are combined as the final results in the destination operand (the first operand). The destination and the first source operands are ZMM/YMM/XMM registers. The second source operand can be a ZMM/YMM/XMM register, a 512/256/128-bit memory location or a 512/256/128-bit vector broadcasted from a 64-bit memory location.The two-level look-up table perform a fix-up of each SP FP input data in the first source operand by decoding the input data encoding into 8 token types. A response table is defined for each token type that converts the input encoding in the first source operand with one of 16 response actions. This instruction is specifically intended for use in fixing up the results of arithmetic calculations involving one source so that they match the spec, although it is generally useful for fixing up the results of multiple-instruction sequences to reflect special-number inputs. For example, consider rcp(0). Input 0 to rcp, and you should get INF according to the DX10 spec. However, evaluating rcp via Newton-Raphson, where x=approx(1/0), yields an incor-rect result. To deal with this, VFIXUPIMMPS can be used after the N-R reciprocal sequence to set the result to the correct value (i.e. INF when the input is 0).If MXCSR.DAZ is not set, denormal input elements in the first source operand are considered as normal inputs and do not trigger any fixup nor fault reporting.Imm8 is used to set the required flags reporting. It supports #ZE and #IE fault reporting (see details below).MXCSR.DAZ is used and refer to zmm2 only (i.e. zmm1 is not considered as zero in case MXCSR.DAZ is set).MXCSR mask bits are ignored and are treated as if all mask bits are set to masked response). If any of the imm8 bits is set and the condition met for fault reporting, MXCSR.IE or MXCSR.ZE might be updated.Opcode/InstructionOp / En64/32 bit Mode SupportCPUID Feature FlagDescriptionEVEX.128.66.0F3A.W0 54 /rVFIXUPIMMPS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst, imm8AV/VAVX512VLAVX512FFix up special numbers in float32 vector xmm1, float32 vector xmm2 and int32 vector xmm3/m128/m32bcst and store the result in xmm1, under writemask.EVEX.256.66.0F3A.W0 54 /rVFIXUPIMMPS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst, imm8AV/VAVX512VLAVX512FFix up special numbers in float32 vector ymm1, float32 vector ymm2 and int32 vector ymm3/m256/m32bcst and store the result in ymm1, under writemask.EVEX.512.66.0F3A.W0 54 /r ibVFIXUPIMMPS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst{sae}, imm8AV/VAVX512FFix up elements of float32 vector in zmm2 using int32 vector table in zmm3/m512/m32bcst, combine with preserved elements from zmm1, and store the result in zmm1.Op/EnTuple TypeOperand 1Operand 2Operand 3Operand 4AFullModRM:reg (r, w)EVEX.vvvv (r)ModRM:r/m (r)Imm8

image/svg+xmlOperationenum TOKEN_TYPE{QNAN_TOKEN := 0,SNAN_TOKEN := 1,ZERO_VALUE_TOKEN := 2,POS_ONE_VALUE_TOKEN := 3,NEG_INF_TOKEN := 4,POS_INF_TOKEN := 5,NEG_VALUE_TOKEN := 6,POS_VALUE_TOKEN := 7}FIXUPIMM_SP ( dest[31:0], src1[31:0],tbl3[31:0], imm8 [7:0]){tsrc[31:0] := ((src1[30:23] = 0) AND (MXCSR.DAZ =1)) ? 0.0 : src1[31:0]CASE(tsrc[31:0] of TOKEN_TYPE) {QNAN_TOKEN: j := 0;SNAN_TOKEN: j := 1;ZERO_VALUE_TOKEN: j := 2;POS_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;}; end source special CASE(tsrc…) ; The required response from src3 table is extractedtoken_response[3:0] = tbl3[3+4*j:4*j];CASE(token_response[3:0]) {0000: dest[31:0] := dest[31:0]; ; preserve content of DEST0001: dest[31:0] := tsrc[31:0]; ; pass through src1 normal input value, denormal as zero0010: dest[31:0] := QNaN(tsrc[31:0]);0011: dest[31:0] := QNAN_Indefinite;0100: dest[31:0] := -INF;0101: dest[31:0] := +INF;0110: dest[31:0] := tsrc.sign? –INF : +INF;0111: dest[31:0] := -0;1000: dest[31:0] := +0;1001: dest[31:0] := -1;1010: dest[31:0] := +1;1011: dest[31:0] := ½;1100: dest[31:0] := 90.0;1101: dest[31:0] := PI/2;1110: dest[31:0] := MAX_FLOAT;1111: dest[31:0] := -MAX_FLOAT;} ; end of token_response CASE

image/svg+xml; The required fault reporting from imm8 is extracted ; TOKENs are mutually exclusive and TOKENs priority defines the order.  ; Multiple faults related to a single token can occur simultaneously.IF (tsrc[31:0] of TOKEN_TYPE: ZERO_VALUE_TOKEN) AND imm8[0] then set #ZE;IF (tsrc[31:0] of TOKEN_TYPE: ZERO_VALUE_TOKEN) AND imm8[1] then set #IE;IF (tsrc[31:0] of TOKEN_TYPE: ONE_VALUE_TOKEN) AND imm8[2] then set #ZE;IF (tsrc[31:0] of TOKEN_TYPE: ONE_VALUE_TOKEN) AND imm8[3] then set #IE;IF (tsrc[31:0] of TOKEN_TYPE: SNAN_TOKEN) AND imm8[4] then set #IE;IF (tsrc[31:0] of TOKEN_TYPE: NEG_INF_TOKEN) AND imm8[5] then set #IE;IF (tsrc[31:0] of TOKEN_TYPE: NEG_VALUE_TOKEN) AND imm8[6] then set #IE;IF (tsrc[31:0] of TOKEN_TYPE: POS_INF_TOKEN) AND imm8[7] then set #IE;; end fault reporting return dest[31:0];} ; end of FIXUPIMM_SP()VFIXUPIMMPS (EVEX)(KL, VL) = (4, 128), (8, 256), (16, 512)FOR j := 0 TO KL-1i := j * 32IF k1[j] OR *no writemask*THEN IF (EVEX.b = 1) AND (SRC2 *is memory*)THENDEST[i+31:i] := FIXUPIMM_SP(DEST[i+31:i], SRC1[i+31:i], SRC2[31:0], imm8 [7:0])ELSE DEST[i+31:i] := FIXUPIMM_SP(DEST[i+31:i], SRC1[i+31:i], SRC2[i+31:i], imm8 [7:0])FI;ELSE IF *merging-masking*; merging-maskingTHEN *DEST[i+31:i] remains unchanged*ELSE DEST[i+31:i] := 0; zeroing-maskingFIFI;ENDFORDEST[MAXVL-1:VL] := 0

image/svg+xmlImmediate Control Description:Intel C/C++ Compiler Intrinsic EquivalentVFIXUPIMMPS __m512 _mm512_fixupimm_ps( __m512 a, __m512i tbl, int imm);VFIXUPIMMPS __m512 _mm512_mask_fixupimm_ps(__m512 s, __mmask16 k, __m512 a, __m512i tbl, int imm);VFIXUPIMMPS __m512 _mm512_maskz_fixupimm_ps( __mmask16 k, __m512 a, __m512i tbl, int imm);VFIXUPIMMPS __m512 _mm512_fixupimm_round_ps( __m512 a, __m512i tbl, int imm, int sae);VFIXUPIMMPS __m512 _mm512_mask_fixupimm_round_ps(__m512 s, __mmask16 k, __m512 a, __m512i tbl, int imm, int sae);VFIXUPIMMPS __m512 _mm512_maskz_fixupimm_round_ps( __mmask16 k, __m512 a, __m512i tbl, int imm, int sae);VFIXUPIMMPS __m256 _mm256_fixupimm_ps( __m256 a, __m256 b, __m256i c, int imm8);VFIXUPIMMPS __m256 _mm256_mask_fixupimm_ps(__m256 a, __mmask8 k, __m256 b, __m256i c, int imm8);VFIXUPIMMPS __m256 _mm256_maskz_fixupimm_ps( __mmask8 k, __m256 a, __m256b, __m256i c, int imm8);VFIXUPIMMPS __m128 _mm_fixupimm_ps( __m128 a, __m128 b, 128i c, int imm8);VFIXUPIMMPS __m128 _mm_mask_fixupimm_ps(__m128 a, __mmask8 k, __m128 b, __m128i c, int imm8);VFIXUPIMMPS __m128 _mm_maskz_fixupimm_ps( __mmask8 k, __m128 a, __m128 b, __m128i c, int imm8);SIMD Floating-Point ExceptionsZero, InvalidOther ExceptionsSee Table2-46, “Type E2 Class Exception Conditions”.Figure 5-10. VFIXUPIMMPS Immediate Control Description76543210+INF #IE-INF #IESNaN #IE-VE #IEONE #IEONE #ZEZERO #IEZERO #ZE

This UNOFFICIAL reference was generated from the official Intel® 64 and IA-32 Architectures Software Developer’s Manual by a dumb script. There is no guarantee that some parts aren't mangled or broken and is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.