private static float8 vdiv_ushort_AVX(ushort8 dividend, ushort8 divisor) { Assert.AreNotEqual(divisor.x0, 0); Assert.AreNotEqual(divisor.x1, 0); Assert.AreNotEqual(divisor.x2, 0); Assert.AreNotEqual(divisor.x3, 0); Assert.AreNotEqual(divisor.x4, 0); Assert.AreNotEqual(divisor.x5, 0); Assert.AreNotEqual(divisor.x6, 0); Assert.AreNotEqual(divisor.x7, 0); if (Avx.IsAvxSupported) { float8 dividend_f32 = dividend; float8 divisor_f32 = divisor; float8 divisor_f32_rcp = Avx.mm256_rcp_ps(divisor_f32); float8 precisionLossCompensation; if (Fma.IsFmaSupported) { precisionLossCompensation = Fma.mm256_fnmadd_ps(divisor_f32_rcp, divisor_f32, new v256(PRECISION_ADJUSTMENT_FACTOR)); } else { precisionLossCompensation = maxmath.mad(-divisor_f32_rcp, divisor_f32, math.asfloat(PRECISION_ADJUSTMENT_FACTOR)); } precisionLossCompensation *= divisor_f32_rcp; precisionLossCompensation *= dividend_f32; return(precisionLossCompensation); } else { throw new CPUFeatureCheckException(); } }