_mm_mask_roundscale_ss
Classification
AVX-512, Miscellaneous, CPUID Test: AVX512F
Header File
Instruction
VRNDSCALESS xmm {k}, xmm, xmm, imm8
Synopsis
_mm_mask_roundscale_ss(__m128 src, __mmask8 k, __m128 a, __m128 b, const int imm8);
Description
Round the lower single-precision (32-bit) floating-point element in "b" to the number of fraction bits specified by "imm8", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". [round_imm_note]
Operation
DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
IF IsInf(tmp[31:0])
tmp[31:0] := src1[31:0]
FI
RETURN tmp[31:0]
}
IF k[0]
dst[31:0] := RoundScaleFP32(b[31:0], imm8[7:0])
ELSE
dst[31:0] := src[31:0]
FI
dst[127:32] := a[127:32]
dst[MAX:128] := 0