D for the thread's rows: its sixteen dO values of row r (and of r + 8)
against O's, summed over the quad; -D and -L kept, D written by the
quad's first lane
624def sqRowTerms = (lambda unrestricted seq : Nat . (lambda unrestricted heads : Nat . (lambda unrestricted tail : (family SM86Program) .
625 (let unrestricted rowBytes = (naturalMultiply heads (naturalMultiply saHeadWidth saHalfBytes)) in
626 -- O in dO's fragment pattern, into the B registers (free before the loop)
627 (saWide saPointer saScratch saOne (saArgument 5)
628 (saFor 16 (lambda unrestricted i : Nat .
629 (let unrestricted kt = (naturalDivideUnchecked i 4) in (let unrestricted j = (naturalModuloUnchecked i 4) in
630 (saLoad (naturalAdd 100 i) saPointer
631 (naturalAdd (naturalMultiply kt 32)
632 (naturalAdd (naturalMultiply (naturalModuloUnchecked j 2) (naturalMultiply 8 rowBytes))
633 (naturalMultiply (naturalDivideUnchecked j 2) 16)))
634 saSB0 saWaitNone))))
635 (saMovImm (sqTmp 0) 0 (saMovImm (sqTmp 1) 0
636 -- register j of slice kt is row r (j even) or r + 8 (j odd); both halves
637 (saFor 32 (lambda unrestricted i : Nat .
638 (let unrestricted r = (naturalDivideUnchecked i 2) in (let unrestricted high = (naturalModuloUnchecked i 2) in
639 (let unrestricted h = (naturalModuloUnchecked (naturalModuloUnchecked r 4) 2) in
640 (lambda unrestricted rest : (family SM86Program) .
641 (sbWiden (sqTmp 2) (naturalAdd 100 r) high (naturalSelect (naturalIsZero i) (naturalAdd saWait0 saWait1) saWaitNone)
642 (sbWiden (sqTmp 3) (naturalAdd (sqDOut 0) r) high saWaitNone
643 (saFfma (sqTmp h) (sqTmp 2) (sqTmp 3) (sqTmp h)
644 rest))))))))
645 (saFor 2 (lambda unrestricted h : Nat . (lambda unrestricted rest : (family SM86Program) .
646 (saShfl (sqTmp 2) (sqTmp h) 1 saWaitNone
647 (saFadd (sqTmp h) (sqTmp h) (sqTmp 2) saWait5
648 (saShfl (sqTmp 2) (sqTmp h) 2 saWaitNone
649 (saFadd (sqTmp h) (sqTmp h) (sqTmp 2) saWait5
650 (saFneg (sqNegD h) (sqTmp h)
651 rest)))))))
652 -- D and L at 4 (h seq + row): D by the quad's first lane; -L
653 (saWide saPointer saRow saOne (saArgument 8)
654 (saGreater saP0 saQuadLane 0
655 (saUnless saP0 (saStore saPointer (sqTmp 0) 0 saWaitNone)
656 (saUnless saP0 (saStore saPointer (sqTmp 1) 32 saWaitNone)
657 (saWide saPointer saRow saOne (saArgument 6)
658 (saLoad (sqTmp 2) saPointer 0 saSB1 saWaitNone
659 (saLoad (sqTmp 3) saPointer 32 saSB1 saWaitNone
660 (sbNegate (sqNegL 0) (sqTmp 2) saWait1
661 (sbNegate (sqNegL 1) (sqTmp 3) saWaitNone
662 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.