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
643def sqRowTerms = (lambda unrestricted seq : Nat . (lambda unrestricted heads : Nat . (lambda unrestricted tail : (family SM86Program) .
644 (let unrestricted rowBytes = (naturalMultiply heads (naturalMultiply saHeadWidth saHalfBytes)) in
645 -- O in dO's fragment pattern, into the B registers (free before the loop)
646 (saWide saPointer saScratch saOne (saArgument 5)
647 (saFor 16 (lambda unrestricted i : Nat .
648 (let unrestricted kt = (naturalDivideUnchecked i 4) in (let unrestricted j = (naturalModuloUnchecked i 4) in
649 (saLoad (naturalAdd 100 i) saPointer
650 (naturalAdd (naturalMultiply kt 32)
651 (naturalAdd (naturalMultiply (naturalModuloUnchecked j 2) (naturalMultiply 8 rowBytes))
652 (naturalMultiply (naturalDivideUnchecked j 2) 16)))
653 saSB0 saWaitNone))))
654 (saMovImm (sqTmp 0) 0 (saMovImm (sqTmp 1) 0
655 -- register j of slice kt is row r (j even) or r + 8 (j odd); both halves
656 (saFor 32 (lambda unrestricted i : Nat .
657 (let unrestricted r = (naturalDivideUnchecked i 2) in (let unrestricted high = (naturalModuloUnchecked i 2) in
658 (let unrestricted h = (naturalModuloUnchecked (naturalModuloUnchecked r 4) 2) in
659 (lambda unrestricted rest : (family SM86Program) .
660 (sbWiden (sqTmp 2) (naturalAdd 100 r) high (naturalSelect (naturalIsZero i) (naturalAdd saWait0 saWait1) saWaitNone)
661 (sbWiden (sqTmp 3) (naturalAdd (sqDOut 0) r) high saWaitNone
662 (saFfma (sqTmp h) (sqTmp 2) (sqTmp 3) (sqTmp h)
663 rest))))))))
664 (saFor 2 (lambda unrestricted h : Nat . (lambda unrestricted rest : (family SM86Program) .
665 (saShfl (sqTmp 2) (sqTmp h) 1 saWaitNone
666 (saFadd (sqTmp h) (sqTmp h) (sqTmp 2) saWait5
667 (saShfl (sqTmp 2) (sqTmp h) 2 saWaitNone
668 (saFadd (sqTmp h) (sqTmp h) (sqTmp 2) saWait5
669 (saFneg (sqNegD h) (sqTmp h)
670 rest)))))))
671 -- D and L at 4 (h seq + row): D by the quad's first lane; -L
672 (saWide sqRowTermStorePointer saRow saOne (saArgument 8)
673 (saGreater saP0 saQuadLane 0
674 (saUnless saP0 (saStore sqRowTermStorePointer (sqTmp 0) 0 saWaitNone)
675 (saUnless saP0 (saStore sqRowTermStorePointer (sqTmp 1) 32 saWaitNone)
676 (saWide saPointer saRow saOne (saArgument 6)
677 (saLoad (sqTmp 2) saPointer 0 saSB1 saWaitNone
678 (saLoad (sqTmp 3) saPointer 32 saSB1 saWaitNone
679 (sbNegate (sqNegL 0) (sqTmp 2) saWait1
680 (sbNegate (sqNegL 1) (sqTmp 3) saWaitNone
681 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.