Lines Matching defs:zn
34 const ZRegister& zn,
39 if (TrySingleAddSub(option, zd, zn, imm)) return;
46 // Add(zd.VnH(), zn.VnH(), 0xffff...) to Sub(..., 1), etc.
53 if (TrySingleAddSub(n_option, zd, zn, n_imm)) return;
58 ZRegister scratch = temps.AcquireZ().WithLaneSize(zn.GetLaneSizeInBits());
63 add(zd, zn, scratch);
65 sub(zd, zn, scratch);
71 const ZRegister& zn,
79 MovprfxHelperScope guard(this, zd, zn);
95 const ZRegister& zn,
101 MovprfxHelperScope guard(this, zd, zn);
108 MovprfxHelperScope guard(this, zd, zn);
120 zd.Aliases(zn) ? temps.AcquireZ().WithLaneSize(zn.GetLaneSizeInBits())
126 (this->*reg_macro)(zd, pg.Merging(), zn, scratch);
130 const ZRegister& zn,
135 IntWideImmHelper(imm_fn, reg_fn, zd, zn, imm, true);
139 const ZRegister& zn,
145 IntWideImmHelper(imm_fn, reg_fn, zd, zn, imm, true);
149 const ZRegister& zn,
155 IntWideImmHelper(imm_fn, reg_fn, zd, zn, imm, true);
159 const ZRegister& zn,
165 IntWideImmHelper(imm_fn, reg_fn, zd, zn, imm, false);
169 const ZRegister& zn,
175 IntWideImmHelper(imm_fn, reg_fn, zd, zn, imm, false);
504 const ZRegister& zn,
508 if (zd.Aliases(zn)) {
511 (this->*fn)(zd, pg, zn, zm);
513 // E.g. zd = zn / zd
515 (this->*rev_fn)(zd, pg, zm, zn);
517 // E.g. zd = zn / zm
518 MovprfxHelperScope guard(this, zd, pg, zn);
526 const ZRegister& zn,
532 if (zd.Aliases(zn)) {
540 (this->*fn)(zd, pg, zd, zn);
547 ZRegister scratch = temps.AcquireZ().WithSameLaneSizeAs(zn);
549 MovprfxHelperScope guard(this, scratch, pg, zn);
560 MovprfxHelperScope guard(this, zd, pg, zn);
565 // Instructions of the form "inst zda, zn, zm, #num", where they are
574 const ZRegister& zn, \
577 if ((zd.Aliases(zn) || zd.Aliases(zm)) && !zd.Aliases(za)) { \
579 VIXL_ASSERT(AreSameLaneSize(zn, zm)); \
580 ZRegister ztmp = temps.AcquireZ().WithSameLaneSizeAs(zn); \
581 Mov(ztmp, zd.Aliases(zn) ? zn : zm); \
584 (zd.Aliases(zn) ? ztmp : zn), \
589 ASMFN(zd, zn, zm, imm); \
595 // Instructions of the form "inst zda, zn, zm, #num, #num", where they are
606 const ZRegister& zn, \
610 if ((zd.Aliases(zn) || zd.Aliases(zm)) && !zd.Aliases(za)) { \
615 ASMFN(ztmp, zn, zm, index, rot); \
620 ASMFN(zd, zn, zm, index, rot); \
626 // Instructions of the form "inst zda, pg, zda, zn", where they are
647 const ZRegister& zn, \
650 if (zd.Aliases(zm) && !zd.Aliases(zn)) { \
654 MovprfxHelperScope guard(this, zd, pg, zn); \
657 MovprfxHelperScope guard(this, zd, pg, zn); \
664 // Instructions of the form "inst zda, pg, zda, zn", where they are
689 const ZRegister& zn, \
694 zn, \
706 const ZRegister& zn,
712 zn,
721 const ZRegister& zn,
727 zn,
736 const ZRegister& zn,
742 zn,
751 const ZRegister& zn,
757 zn,
766 const ZRegister& zn,
772 zn,
781 const ZRegister& zn,
787 zn,
796 const ZRegister& zn,
802 zn,
811 const ZRegister& zn,
817 zn,
969 const ZRegister& zn,
973 // zda = zda + (zn * zm)
975 mla(zd, pg, zn, zm);
976 } else if (zd.Aliases(zn)) {
981 // Multiplication is commutative, so we can swap zn and zm.
982 // zdm = za + (zdm * zn)
984 mad(zd, pg, zn, za);
986 // zd = za + (zn * zm)
989 mla(zd, pg, zn, zm);
996 const ZRegister& zn,
1000 // zda = zda - (zn * zm)
1002 mls(zd, pg, zn, zm);
1003 } else if (zd.Aliases(zn)) {
1008 // Multiplication is commutative, so we can swap zn and zm.
1009 // zdm = za - (zdm * zn)
1011 msb(zd, pg, zn, za);
1013 // zd = za - (zn * zm)
1016 mls(zd, pg, zn, zm);
1023 const ZRegister& zn,
1026 ZRegister zm = temps.AcquireZ().WithLaneSize(zn.GetLaneSizeInBits());
1029 cmp(cond, pd, pg, zn, zm);
1248 // In scatter-gather modes, zt and zn/zm have the same lane size. However,
1670 const ZRegister& zn,
1674 // zda = zda + (zn . zm)
1676 (this->*fn)(zd, zn, zm, index);
1678 } else if (zd.Aliases(zn) || zd.Aliases(zm)) {
1680 // zdm = za + (zn . zdm[index])
1686 (this->*fn)(scratch, zn, zm, index);
1691 // zd = za + (zn . zm)
1693 (this->*fn)(zd, zn, zm, index);
1700 const ZRegister& zn,
1702 if (!zd.Aliases(za) && (zd.Aliases(zn) || zd.Aliases(zm))) {
1704 // zd = za . zn . zd
1710 (this->*fn)(scratch, zn, zm);
1716 (this->*fn)(zd, zn, zm);
1723 const ZRegister& zn,
1725 if (!zd.Aliases(za) && (zd.Aliases(zn) || zd.Aliases(zm))) {
1727 // zd = za . zn . zd
1733 (this->*fn)(scratch, scratch, zn, zm);
1739 (this->*fn)(zd, zd, zn, zm);
1746 const ZRegister& zn,
1749 if (!zd.Aliases(za) && (zd.Aliases(zn) || zd.Aliases(zm))) {
1751 // zd = za . zn . zd[i]
1757 (this->*fn)(scratch, zn, zm, imm);
1762 // zd = za . zn . zm[i]
1764 (this->*fn)(zd, zn, zm, imm);
1771 const ZRegister& zn,
1773 if (zn.Aliases(zm)) {
1774 // If zn == zm, the difference is zero.
1780 (this->*fn)(zd, zn, zm);
1781 } else if (zd.Aliases(zn)) {
1783 ZRegister ztmp = temps.AcquireZ().WithLaneSize(zn.GetLaneSizeInBits());
1784 Mov(ztmp, zn);
1789 ZRegister ztmp = temps.AcquireZ().WithLaneSize(zn.GetLaneSizeInBits());
1792 (this->*fn)(zd, zn, ztmp);
1795 (this->*fn)(zd, zn, zm);
1847 const ZRegister& zn, \
1850 HELPER(&Assembler::ASMFN, zd, za, zn, zm); \
1882 const ZRegister& zn, \
1886 HELPER(&Assembler::ASMFN, zd, za, zn, zm, imm); \
1893 const ZRegister& zn,
1897 SVEDotIndexHelper(&Assembler::sdot, zd, za, zn, zm, index);
1902 const ZRegister& zn,
1906 SVEDotIndexHelper(&Assembler::udot, zd, za, zn, zm, index);
1911 const ZRegister& zn,
1915 SVEDotIndexHelper(&Assembler::sudot, zd, za, zn, zm, index);
1920 const ZRegister& zn,
1924 SVEDotIndexHelper(&Assembler::usdot, zd, za, zn, zm, index);
1929 const ZRegister& zn,
1935 if ((zd.Aliases(zn) || zd.Aliases(zm)) && !zd.Aliases(za)) {
1940 cdot(ztmp, zn, zm, index, rot);
1945 cdot(zd, zn, zm, index, rot);
1951 const ZRegister& zn,
1954 if ((zd.Aliases(zn) || zd.Aliases(zm)) && !zd.Aliases(za)) {
1956 VIXL_ASSERT(AreSameLaneSize(zn, zm));
1957 ZRegister ztmp = temps.AcquireZ().WithSameLaneSizeAs(zn);
1958 Mov(ztmp, zd.Aliases(zn) ? zn : zm);
1960 cdot(zd, (zd.Aliases(zn) ? ztmp : zn), (zd.Aliases(zm) ? ztmp : zm), rot);
1963 cdot(zd, zn, zm, rot);
1970 const ZRegister& zn,
1978 // zda = (-)zda + ((-)zn * zm) for fmla, fmls, fnmla and fnmls.
1980 (this->*fn_zda)(zd, pg, zn, zm);
1981 } else if (zd.Aliases(zn)) {
1989 // swap zn and zm.
1990 // zdm = (-)za + ((-)zdm * zn) for fmad, fmsb, fnmad and fnmsb.
1992 (this->*fn_zdn)(zd, pg, zn, za);
1999 ZRegister scratch = temps.AcquireZ().WithSameLaneSizeAs(zn);
2002 // scratch = (-)za + ((-)zn * zm)
2003 (this->*fn_zda)(scratch, pg, zn, zm);
2013 // zd = (-)za + ((-)zn * zm) for fmla, fmls, fnmla and fnmls.
2015 (this->*fn_zda)(zd, pg, zn, zm);
2022 const ZRegister& zn,
2029 zn,
2039 const ZRegister& zn,
2046 zn,
2056 const ZRegister& zn,
2063 zn,
2073 const ZRegister& zn,
2080 zn,
2088 const ZRegister& zn,
2092 if (zd.Aliases(zm) && !zd.Aliases(zn)) {
2096 MovprfxHelperScope guard(this, zd, zn);
2099 MovprfxHelperScope guard(this, zd, zn);
2106 const ZRegister& zn,
2110 if (zd.Aliases(zm) && !zd.Aliases(zn)) {
2114 MovprfxHelperScope guard(this, scratch, pg, zn);
2119 MovprfxHelperScope guard(this, zd, pg, zn);
2127 const ZRegister& zn,
2131 if ((zd.Aliases(zn) || zd.Aliases(zm)) && !zd.Aliases(za)) {
2136 fcmla(ztmp, pg, zn, zm, rot);
2141 fcmla(zd, pg, zn, zm, rot);
2147 const ZRegister& zn,
2150 if (CPUHas(CPUFeatures::kSVE2) && AreConsecutive(zn, zm) && !zd.Aliases(zn)) {
2152 splice(zd, pg, zn, zm);
2153 } else if (zd.Aliases(zm) && !zd.Aliases(zn)) {
2157 MovprfxHelperScope guard(this, scratch, zn);
2162 MovprfxHelperScope guard(this, zd, zn);
2169 const ZRegister& zn,
2172 if (zd.Aliases(zm) && !zd.Aliases(zn)) {
2176 MovprfxHelperScope guard(this, scratch, zn);
2181 MovprfxHelperScope guard(this, zd, zn);
2188 const ZRegister& zn,
2191 if (zd.Aliases(zm) && !zd.Aliases(zn)) {
2195 MovprfxHelperScope guard(this, scratch, zn);
2200 MovprfxHelperScope guard(this, zd, zn);
2208 const ZRegister& zn,
2211 if (!zd.Aliases(za) && zd.Aliases(zn)) {
2213 ZRegister ztmp = temps.AcquireZ().WithSameLaneSizeAs(zn);
2214 Mov(ztmp, zn);
2221 (this->*fn)(zd, zn, shift);
2227 const ZRegister& zn,
2229 ShiftRightAccumulate(&Assembler::srsra, zd, za, zn, shift);
2234 const ZRegister& zn,
2236 ShiftRightAccumulate(&Assembler::ssra, zd, za, zn, shift);
2241 const ZRegister& zn,
2243 ShiftRightAccumulate(&Assembler::ursra, zd, za, zn, shift);
2248 const ZRegister& zn,
2250 ShiftRightAccumulate(&Assembler::usra, zd, za, zn, shift);
2255 const ZRegister& zn,
2259 if (!zd.Aliases(zn) && zd.Aliases(zm)) {
2264 MovprfxHelperScope guard(this, zd, zn);
2268 MovprfxHelperScope guard(this, zd, zn);
2274 const ZRegister& zn,
2277 ComplexAddition(&Assembler::cadd, zd, zn, zm, rot);
2281 const ZRegister& zn,
2284 ComplexAddition(&Assembler::sqcadd, zd, zn, zm, rot);