P^T and dS^T as skScoreGradient, with dS^T = P^T (dP^T - D) left in dP^T's
registers instead of P^T's: the in-place EX2 reads each score register
late (no read barrier), so nothing may write the scores again in the step.
The same additions, multiplications and roundings in the same order.
2856def sksScoreGradient = (lambda unrestricted tail : (family SM86Program) .
2857 (saFor 16 (lambda unrestricted i : Nat .
2858 (let unrestricted nt = (naturalDivideUnchecked i 4) in (let unrestricted h = (naturalDivideUnchecked (naturalModuloUnchecked i 4) 2) in
2859 (let unrestricted b = (naturalModuloUnchecked i 2) in
2860 (let unrestricted e = (saElem (skS nt) h b) in
2861 (lambda unrestricted rest : (family SM86Program) .
2862 (saFfma e e saScale (skNegL nt b)
2863 (saEx2 e e saWaitNone rest))))))))
2864 (skPackRowFragments skS skPA saWait4
2865 (saFor 16 (lambda unrestricted i : Nat .
2866 (let unrestricted nt = (naturalDivideUnchecked i 4) in (let unrestricted h = (naturalDivideUnchecked (naturalModuloUnchecked i 4) 2) in
2867 (let unrestricted b = (naturalModuloUnchecked i 2) in
2868 (let unrestricted e = (saElem (skS nt) h b) in (let unrestricted g = (saElem (skDP nt) h b) in
2869 (lambda unrestricted rest : (family SM86Program) .
2870 (skWeightedDifference g e g (skNegD nt b) saWaitNone rest))))))))
2871 (skPackRowFragments skDP skSA saWaitNone
2872 tail)))))The compiler supplied declaration spans and resolved links from this source snapshot. This page does not assert that this file belongs to a checked closure.