_mm_mask_scalef_sh
Classification
AVX-512, Miscellaneous, CPUID Test: AVX512_FP16
Header File
immintrin.h
Instruction
VSCALEFSH xmm {k}, xmm, xmm
Synopsis
 _mm_mask_scalef_sh(__m128h src, __mmask8 k, __m128h a, __m128h b);
Description
Scale the packed single-precision (32-bit) floating-point elements in "a" using values from "b", 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 7 packed elements from "a" to the upper elements of "dst".
Operation
DEFINE ScaleFP16(src1, src2) {
	denormal1 := (a.exp == 0) and (a.fraction != 0)
	denormal2 := (b.exp == 0) and (b.fraction != 0)
	tmp1 := src1
	tmp2 := src2
	IF MXCSR.DAZ
		IF denormal1
			tmp1 := 0
		FI
		IF denormal2
			tmp2 := 0
		FI
	FI
	RETURN tmp1 * POW(2.0, FLOOR(tmp2))
}
IF k[0]
	dst.fp16[0] := ScaleFP16(a.fp16[0], b.fp16[0])
ELSE
	dst.fp16[0] := src.fp16[0]
FI
dst[127:16] := a[127:16]
dst[MAX:128] := 0