image/svg+xmlVRNDSCALEPD—Round Packed Float64 Values To Include A Given Number Of Fraction BitsInstruction Operand EncodingDescriptionRound the double-precision floating-point values in the source operand by the rounding mode specified in the immediate operand (see Figure5-29) and places the result in the destination operand.The destination operand (the first operand) is a ZMM/YMM/XMM register conditionally updated according to the writemask. The source operand (the second 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 rounding process rounds the input to an integral value, plus number bits of fraction that are specified by imm8[7:4] (to be included in the result) and returns the result as a double-precision floating-point value.It should be noticed that no overflow is induced while executing this instruction (although the source is scaled by the imm8[7:4] value).The immediate operand also specifies control fields for the rounding operation, three bit fields are defined and shown in the “Immediate Control Description” figure below. Bit 3 of the immediate byte controls the processor behavior for a precision exception, bit 2 selects the source of rounding mode control. Bits 1:0 specify a non-sticky rounding-mode value (Immediate control table below lists the encoded values for rounding-mode field).The Precision Floating-Point Exception is signaled according to the immediate operand. If any source operand is an SNaN then it will be converted to a QNaN. If DAZ is set to ‘1 then denormals will be converted to zero before rounding. The sign of the result of this instruction is preserved, including the sign of zero.The formula of the operation on each data element for VRNDSCALEPD isROUND(x) = 2-M*Round_to_INT(x*2M, round_ctrl), round_ctrl = imm[3:0];M=imm[7:4];The operation of x*2M is computed as if the exponent range is unlimited (i.e. no overflow ever occurs).Opcode/InstructionOp / En64/32 bit Mode SupportCPUID Feature FlagDescriptionEVEX.128.66.0F3A.W1 09 /r ibVRNDSCALEPD xmm1 {k1}{z}, xmm2/m128/m64bcst, imm8AV/VAVX512VLAVX512FRounds packed double-precision floating point values in xmm2/m128/m64bcst to a number of fraction bits specified by the imm8 field. Stores the result in xmm1 register. Under writemask.EVEX.256.66.0F3A.W1 09 /r ibVRNDSCALEPD ymm1 {k1}{z}, ymm2/m256/m64bcst, imm8AV/VAVX512VLAVX512FRounds packed double-precision floating point values in ymm2/m256/m64bcst to a number of fraction bits specified by the imm8 field. Stores the result in ymm1 register. Under writemask.EVEX.512.66.0F3A.W1 09 /r ibVRNDSCALEPD zmm1 {k1}{z}, zmm2/m512/m64bcst{sae}, imm8AV/VAVX512FRounds packed double-precision floating-point values in zmm2/m512/m64bcst to a number of fraction bits specified by the imm8 field. Stores the result in zmm1 register using writemask k1.Op/EnTuple TypeOperand 1Operand 2Operand 3Operand 4AFullModRM:reg (w)ModRM:r/m (r)Imm8NA

image/svg+xmlVRNDSCALEPD is a more general form of the VEX-encoded VROUNDPD instruction. In VROUNDPD, the formula of the operation on each element isROUND(x) = Round_to_INT(x, round_ctrl), round_ctrl = imm[3:0];Note: EVEX.vvvv is reserved and must be 1111b, otherwise instructions will #UD.Handling of special case of input values are listed in Table 5-16.Figure 5-29. Imm8 Controls for VRNDSCALEPD/SD/PS/SSTable 5-16. VRNDSCALEPD/SD/PS/SS Special CasesReturned value Src1=±inf Src1Src1=±NANSrc1 converted to QNANSrc1=±0Src170246531Round Control OverrideFixed point lengthImm8[7:4] : Number of fixed points to preserveRSImm8[1:0] = 00b : Round nearest evenImm8[1:0] = 01b : Round downImm8[1:0] = 10b : Round upImm8[1:0] = 11b : Truncateimm8SPERound Select: Imm8[2] Imm8[2] = 0b : Use Imm8[1:0]Imm8[2] = 1b : Use MXCSRSuppress Precision Exception: Imm8[3] Imm8[3] = 0b : Use MXCSR exception maskImm8[3] = 1b : Suppress

image/svg+xmlOperationRoundToIntegerDP(SRC[63:0], imm8[7:0]) {if (imm8[2] = 1)rounding_direction := MXCSR:RC; get round control from MXCSRelserounding_direction := imm8[1:0]; get round control from imm8[1:0]FIM := imm8[7:4]; get the scaling factorcase (rounding_direction)00: TMP[63:0] := round_to_nearest_even_integer(2M*SRC[63:0])01: TMP[63:0] := round_to_equal_or_smaller_integer(2M*SRC[63:0])10: TMP[63:0] := round_to_equal_or_larger_integer(2M*SRC[63:0])11: TMP[63:0] := round_to_nearest_smallest_magnitude_integer(2M*SRC[63:0])ESACDest[63:0] := 2-M* TMP[63:0] ; scale down back to 2-Mif (imm8[3] = 0) Then; check SPEif (SRC[63:0] != Dest[63:0]) Then; check precision lostset_precision(); set #PEFI;FI;return(Dest[63:0])}VRNDSCALEPD (EVEX encoded versions) (KL, VL) = (2, 128), (4, 256), (8, 512)IF *src is a memory operand*THEN TMP_SRC := BROADCAST64(SRC, VL, k1)ELSE TMP_SRC := SRCFI;FOR j := 0 TO KL-1i := j * 64IF k1[j] OR *no writemask*THEN DEST[i+63:i] := RoundToIntegerDP((TMP_SRC[i+63:i], imm8[7:0])ELSE IF *merging-masking*; merging-maskingTHEN *DEST[i+63:i] remains unchanged*ELSE ; zeroing-maskingDEST[i+63:i] := 0FI;FI;ENDFOR;DEST[MAXVL-1:VL] := 0

image/svg+xmlIntel C/C++ Compiler Intrinsic EquivalentVRNDSCALEPD __m512d _mm512_roundscale_pd( __m512d a, int imm);VRNDSCALEPD __m512d _mm512_roundscale_round_pd( __m512d a, int imm, int sae);VRNDSCALEPD __m512d _mm512_mask_roundscale_pd(__m512d s, __mmask8 k, __m512d a, int imm);VRNDSCALEPD __m512d _mm512_mask_roundscale_round_pd(__m512d s, __mmask8 k, __m512d a, int imm, int sae);VRNDSCALEPD __m512d _mm512_maskz_roundscale_pd( __mmask8 k, __m512d a, int imm);VRNDSCALEPD __m512d _mm512_maskz_roundscale_round_pd( __mmask8 k, __m512d a, int imm, int sae);VRNDSCALEPD __m256d _mm256_roundscale_pd( __m256d a, int imm);VRNDSCALEPD __m256d _mm256_mask_roundscale_pd(__m256d s, __mmask8 k, __m256d a, int imm);VRNDSCALEPD __m256d _mm256_maskz_roundscale_pd( __mmask8 k, __m256d a, int imm);VRNDSCALEPD __m128d _mm_roundscale_pd( __m128d a, int imm);VRNDSCALEPD __m128d _mm_mask_roundscale_pd(__m128d s, __mmask8 k, __m128d a, int imm);VRNDSCALEPD __m128d _mm_maskz_roundscale_pd( __mmask8 k, __m128d a, int imm);SIMD Floating-Point ExceptionsInvalid, PrecisionIf SPE is enabled, precision exception is not reported (regardless of MXCSR exception mask).Other ExceptionsSee Table2-46, “Type E2 Class Exception Conditions”.

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.