From 29758c1458b832e74fd619df9f3ba887ab70049b Mon Sep 17 00:00:00 2001 From: Sam Hocevar Date: Wed, 29 Apr 2020 14:02:01 +0200 Subject: [PATCH] Math: simplify vector swizzling rules. --- include/lol/private/math/ops.h | 2 +- include/lol/private/math/vector.h | 980 +++++++++++++++--------------- 2 files changed, 490 insertions(+), 492 deletions(-) diff --git a/include/lol/private/math/ops.h b/include/lol/private/math/ops.h index 6e16b5a0..4cb2b36d 100644 --- a/include/lol/private/math/ops.h +++ b/include/lol/private/math/ops.h @@ -23,7 +23,7 @@ // HACK: if this is declared int const, Visual Studio becomes unable // to perform template argument deduction. // FIXME: should we get rid of this #define? -#define FULL_SWIZZLE (0) +#define FULL_SWIZZLE (-1) namespace lol { diff --git a/include/lol/private/math/vector.h b/include/lol/private/math/vector.h index 2caa72ac..3edda74f 100644 --- a/include/lol/private/math/vector.h +++ b/include/lol/private/math/vector.h @@ -78,15 +78,13 @@ struct [[nodiscard]] vec_t inline T& operator[](size_t n) { - int const lut[] = { 1000, 100, 10, 1 }; - int const i = SWIZZLE / lut[n + 4 - N] % 10; + int const i = (SWIZZLE >> (3 * (N - 1 - n))) & 3; return static_cast(static_cast(this))[i]; } inline T const& operator[](size_t n) const { - int const lut[] = { 1000, 100, 10, 1 }; - int const i = SWIZZLE / lut[n + 4 - N] % 10; + int const i = (SWIZZLE >> (3 * (N - 1 - n))) & 3; return static_cast(static_cast(this))[i]; } @@ -267,36 +265,36 @@ struct [[nodiscard]] vec_t struct { T s, t; }; #if !_DOXYGEN_SKIP_ME - vec_t const xx, rr, ss; - vec_t const xy, rg, st; - vec_t const yx, gr, ts; - vec_t const yy, gg, tt; - - vec_t const xxx, rrr, sss; - vec_t const xxy, rrg, sst; - vec_t const xyx, rgr, sts; - vec_t const xyy, rgg, stt; - vec_t const yxx, grr, tss; - vec_t const yxy, grg, tst; - vec_t const yyx, ggr, tts; - vec_t const yyy, ggg, ttt; - - vec_t const xxxx, rrrr, ssss; - vec_t const xxxy, rrrg, ssst; - vec_t const xxyx, rrgr, ssts; - vec_t const xxyy, rrgg, sstt; - vec_t const xyxx, rgrr, stss; - vec_t const xyxy, rgrg, stst; - vec_t const xyyx, rggr, stts; - vec_t const xyyy, rggg, sttt; - vec_t const yxxx, grrr, tsss; - vec_t const yxxy, grrg, tsst; - vec_t const yxyx, grgr, tsts; - vec_t const yxyy, grgg, tstt; - vec_t const yyxx, ggrr, ttss; - vec_t const yyxy, ggrg, ttst; - vec_t const yyyx, gggr, ttts; - vec_t const yyyy, gggg, tttt; + vec_t const xx, rr, ss; + vec_t const xy, rg, st; + vec_t const yx, gr, ts; + vec_t const yy, gg, tt; + + vec_t const xxx, rrr, sss; + vec_t const xxy, rrg, sst; + vec_t const xyx, rgr, sts; + vec_t const xyy, rgg, stt; + vec_t const yxx, grr, tss; + vec_t const yxy, grg, tst; + vec_t const yyx, ggr, tts; + vec_t const yyy, ggg, ttt; + + vec_t const xxxx, rrrr, ssss; + vec_t const xxxy, rrrg, ssst; + vec_t const xxyx, rrgr, ssts; + vec_t const xxyy, rrgg, sstt; + vec_t const xyxx, rgrr, stss; + vec_t const xyxy, rgrg, stst; + vec_t const xyyx, rggr, stts; + vec_t const xyyy, rggg, sttt; + vec_t const yxxx, grrr, tsss; + vec_t const yxxy, grrg, tsst; + vec_t const yxyx, grgr, tsts; + vec_t const yxyy, grgg, tstt; + vec_t const yyxx, ggrr, ttss; + vec_t const yyxy, ggrg, ttst; + vec_t const yyyx, gggr, ttts; + vec_t const yyyy, gggg, tttt; #endif T m_data[count]; @@ -412,125 +410,125 @@ struct [[nodiscard]] vec_t struct { T s, t, p; }; #if !_DOXYGEN_SKIP_ME - vec_t const xx, rr, ss; - vec_t const xy, rg, st; - vec_t const xz, rb, sp; - vec_t const yx, gr, ts; - vec_t const yy, gg, tt; - vec_t const yz, gb, tp; - vec_t const zx, br, ps; - vec_t const zy, bg, pt; - vec_t const zz, bb, pp; - - vec_t const xxx, rrr, sss; - vec_t const xxy, rrg, sst; - vec_t const xxz, rrb, ssp; - vec_t const xyx, rgr, sts; - vec_t const xyy, rgg, stt; - vec_t const xyz, rgb, stp; - vec_t const xzx, rbr, sps; - vec_t const xzy, rbg, spt; - vec_t const xzz, rbb, spp; - vec_t const yxx, grr, tss; - vec_t const yxy, grg, tst; - vec_t const yxz, grb, tsp; - vec_t const yyx, ggr, tts; - vec_t const yyy, ggg, ttt; - vec_t const yyz, ggb, ttp; - vec_t const yzx, gbr, tps; - vec_t const yzy, gbg, tpt; - vec_t const yzz, gbb, tpp; - vec_t const zxx, brr, pss; - vec_t const zxy, brg, pst; - vec_t const zxz, brb, psp; - vec_t const zyx, bgr, pts; - vec_t const zyy, bgg, ptt; - vec_t const zyz, bgb, ptp; - vec_t const zzx, bbr, pps; - vec_t const zzy, bbg, ppt; - vec_t const zzz, bbb, ppp; - - vec_t const xxxx, rrrr, ssss; - vec_t const xxxy, rrrg, ssst; - vec_t const xxxz, rrrb, sssp; - vec_t const xxyx, rrgr, ssts; - vec_t const xxyy, rrgg, sstt; - vec_t const xxyz, rrgb, sstp; - vec_t const xxzx, rrbr, ssps; - vec_t const xxzy, rrbg, sspt; - vec_t const xxzz, rrbb, sspp; - vec_t const xyxx, rgrr, stss; - vec_t const xyxy, rgrg, stst; - vec_t const xyxz, rgrb, stsp; - vec_t const xyyx, rggr, stts; - vec_t const xyyy, rggg, sttt; - vec_t const xyyz, rggb, sttp; - vec_t const xyzx, rgbr, stps; - vec_t const xyzy, rgbg, stpt; - vec_t const xyzz, rgbb, stpp; - vec_t const xzxx, rbrr, spss; - vec_t const xzxy, rbrg, spst; - vec_t const xzxz, rbrb, spsp; - vec_t const xzyx, rbgr, spts; - vec_t const xzyy, rbgg, sptt; - vec_t const xzyz, rbgb, sptp; - vec_t const xzzx, rbbr, spps; - vec_t const xzzy, rbbg, sppt; - vec_t const xzzz, rbbb, sppp; - vec_t const yxxx, grrr, tsss; - vec_t const yxxy, grrg, tsst; - vec_t const yxxz, grrb, tssp; - vec_t const yxyx, grgr, tsts; - vec_t const yxyy, grgg, tstt; - vec_t const yxyz, grgb, tstp; - vec_t const yxzx, grbr, tsps; - vec_t const yxzy, grbg, tspt; - vec_t const yxzz, grbb, tspp; - vec_t const yyxx, ggrr, ttss; - vec_t const yyxy, ggrg, ttst; - vec_t const yyxz, ggrb, ttsp; - vec_t const yyyx, gggr, ttts; - vec_t const yyyy, gggg, tttt; - vec_t const yyyz, gggb, tttp; - vec_t const yyzx, ggbr, ttps; - vec_t const yyzy, ggbg, ttpt; - vec_t const yyzz, ggbb, ttpp; - vec_t const yzxx, gbrr, tpss; - vec_t const yzxy, gbrg, tpst; - vec_t const yzxz, gbrb, tpsp; - vec_t const yzyx, gbgr, tpts; - vec_t const yzyy, gbgg, tptt; - vec_t const yzyz, gbgb, tptp; - vec_t const yzzx, gbbr, tpps; - vec_t const yzzy, gbbg, tppt; - vec_t const yzzz, gbbb, tppp; - vec_t const zxxx, brrr, psss; - vec_t const zxxy, brrg, psst; - vec_t const zxxz, brrb, pssp; - vec_t const zxyx, brgr, psts; - vec_t const zxyy, brgg, pstt; - vec_t const zxyz, brgb, pstp; - vec_t const zxzx, brbr, psps; - vec_t const zxzy, brbg, pspt; - vec_t const zxzz, brbb, pspp; - vec_t const zyxx, bgrr, ptss; - vec_t const zyxy, bgrg, ptst; - vec_t const zyxz, bgrb, ptsp; - vec_t const zyyx, bggr, ptts; - vec_t const zyyy, bggg, pttt; - vec_t const zyyz, bggb, pttp; - vec_t const zyzx, bgbr, ptps; - vec_t const zyzy, bgbg, ptpt; - vec_t const zyzz, bgbb, ptpp; - vec_t const zzxx, bbrr, ppss; - vec_t const zzxy, bbrg, ppst; - vec_t const zzxz, bbrb, ppsp; - vec_t const zzyx, bbgr, ppts; - vec_t const zzyy, bbgg, pptt; - vec_t const zzyz, bbgb, pptp; - vec_t const zzzx, bbbr, ppps; - vec_t const zzzy, bbbg, pppt; - vec_t const zzzz, bbbb, pppp; + vec_t const xx, rr, ss; + vec_t const xy, rg, st; + vec_t const xz, rb, sp; + vec_t const yx, gr, ts; + vec_t const yy, gg, tt; + vec_t const yz, gb, tp; + vec_t const zx, br, ps; + vec_t const zy, bg, pt; + vec_t const zz, bb, pp; + + vec_t const xxx, rrr, sss; + vec_t const xxy, rrg, sst; + vec_t const xxz, rrb, ssp; + vec_t const xyx, rgr, sts; + vec_t const xyy, rgg, stt; + vec_t const xyz, rgb, stp; + vec_t const xzx, rbr, sps; + vec_t const xzy, rbg, spt; + vec_t const xzz, rbb, spp; + vec_t const yxx, grr, tss; + vec_t const yxy, grg, tst; + vec_t const yxz, grb, tsp; + vec_t const yyx, ggr, tts; + vec_t const yyy, ggg, ttt; + vec_t const yyz, ggb, ttp; + vec_t const yzx, gbr, tps; + vec_t const yzy, gbg, tpt; + vec_t const yzz, gbb, tpp; + vec_t const zxx, brr, pss; + vec_t const zxy, brg, pst; + vec_t const zxz, brb, psp; + vec_t const zyx, bgr, pts; + vec_t const zyy, bgg, ptt; + vec_t const zyz, bgb, ptp; + vec_t const zzx, bbr, pps; + vec_t const zzy, bbg, ppt; + vec_t const zzz, bbb, ppp; + + vec_t const xxxx, rrrr, ssss; + vec_t const xxxy, rrrg, ssst; + vec_t const xxxz, rrrb, sssp; + vec_t const xxyx, rrgr, ssts; + vec_t const xxyy, rrgg, sstt; + vec_t const xxyz, rrgb, sstp; + vec_t const xxzx, rrbr, ssps; + vec_t const xxzy, rrbg, sspt; + vec_t const xxzz, rrbb, sspp; + vec_t const xyxx, rgrr, stss; + vec_t const xyxy, rgrg, stst; + vec_t const xyxz, rgrb, stsp; + vec_t const xyyx, rggr, stts; + vec_t const xyyy, rggg, sttt; + vec_t const xyyz, rggb, sttp; + vec_t const xyzx, rgbr, stps; + vec_t const xyzy, rgbg, stpt; + vec_t const xyzz, rgbb, stpp; + vec_t const xzxx, rbrr, spss; + vec_t const xzxy, rbrg, spst; + vec_t const xzxz, rbrb, spsp; + vec_t const xzyx, rbgr, spts; + vec_t const xzyy, rbgg, sptt; + vec_t const xzyz, rbgb, sptp; + vec_t const xzzx, rbbr, spps; + vec_t const xzzy, rbbg, sppt; + vec_t const xzzz, rbbb, sppp; + vec_t const yxxx, grrr, tsss; + vec_t const yxxy, grrg, tsst; + vec_t const yxxz, grrb, tssp; + vec_t const yxyx, grgr, tsts; + vec_t const yxyy, grgg, tstt; + vec_t const yxyz, grgb, tstp; + vec_t const yxzx, grbr, tsps; + vec_t const yxzy, grbg, tspt; + vec_t const yxzz, grbb, tspp; + vec_t const yyxx, ggrr, ttss; + vec_t const yyxy, ggrg, ttst; + vec_t const yyxz, ggrb, ttsp; + vec_t const yyyx, gggr, ttts; + vec_t const yyyy, gggg, tttt; + vec_t const yyyz, gggb, tttp; + vec_t const yyzx, ggbr, ttps; + vec_t const yyzy, ggbg, ttpt; + vec_t const yyzz, ggbb, ttpp; + vec_t const yzxx, gbrr, tpss; + vec_t const yzxy, gbrg, tpst; + vec_t const yzxz, gbrb, tpsp; + vec_t const yzyx, gbgr, tpts; + vec_t const yzyy, gbgg, tptt; + vec_t const yzyz, gbgb, tptp; + vec_t const yzzx, gbbr, tpps; + vec_t const yzzy, gbbg, tppt; + vec_t const yzzz, gbbb, tppp; + vec_t const zxxx, brrr, psss; + vec_t const zxxy, brrg, psst; + vec_t const zxxz, brrb, pssp; + vec_t const zxyx, brgr, psts; + vec_t const zxyy, brgg, pstt; + vec_t const zxyz, brgb, pstp; + vec_t const zxzx, brbr, psps; + vec_t const zxzy, brbg, pspt; + vec_t const zxzz, brbb, pspp; + vec_t const zyxx, bgrr, ptss; + vec_t const zyxy, bgrg, ptst; + vec_t const zyxz, bgrb, ptsp; + vec_t const zyyx, bggr, ptts; + vec_t const zyyy, bggg, pttt; + vec_t const zyyz, bggb, pttp; + vec_t const zyzx, bgbr, ptps; + vec_t const zyzy, bgbg, ptpt; + vec_t const zyzz, bgbb, ptpp; + vec_t const zzxx, bbrr, ppss; + vec_t const zzxy, bbrg, ppst; + vec_t const zzxz, bbrb, ppsp; + vec_t const zzyx, bbgr, ppts; + vec_t const zzyy, bbgg, pptt; + vec_t const zzyz, bbgb, pptp; + vec_t const zzzx, bbbr, ppps; + vec_t const zzzy, bbbg, pppt; + vec_t const zzzz, bbbb, pppp; #endif T m_data[count]; @@ -617,344 +615,344 @@ struct [[nodiscard]] vec_t struct { T s, t, p, q; }; #if !_DOXYGEN_SKIP_ME - vec_t const xx, rr, ss; - vec_t const xy, rg, st; - vec_t const xz, rb, sp; - vec_t const xw, ra, sq; - vec_t const yx, gr, ts; - vec_t const yy, gg, tt; - vec_t const yz, gb, tp; - vec_t const yw, ga, tq; - vec_t const zx, br, ps; - vec_t const zy, bg, pt; - vec_t const zz, bb, pp; - vec_t const zw, ba, pq; - vec_t const wx, ar, qs; - vec_t const wy, ag, qt; - vec_t const wz, ab, qp; - vec_t const ww, aa, qq; - - vec_t const xxx, rrr, sss; - vec_t const xxy, rrg, sst; - vec_t const xxz, rrb, ssp; - vec_t const xxw, rra, ssq; - vec_t const xyx, rgr, sts; - vec_t const xyy, rgg, stt; - vec_t const xyz, rgb, stp; - vec_t const xyw, rga, stq; - vec_t const xzx, rbr, sps; - vec_t const xzy, rbg, spt; - vec_t const xzz, rbb, spp; - vec_t const xzw, rba, spq; - vec_t const xwx, rar, sqs; - vec_t const xwy, rag, sqt; - vec_t const xwz, rab, sqp; - vec_t const xww, raa, sqq; - vec_t const yxx, grr, tss; - vec_t const yxy, grg, tst; - vec_t const yxz, grb, tsp; - vec_t const yxw, gra, tsq; - vec_t const yyx, ggr, tts; - vec_t const yyy, ggg, ttt; - vec_t const yyz, ggb, ttp; - vec_t const yyw, gga, ttq; - vec_t const yzx, gbr, tps; - vec_t const yzy, gbg, tpt; - vec_t const yzz, gbb, tpp; - vec_t const yzw, gba, tpq; - vec_t const ywx, gar, tqs; - vec_t const ywy, gag, tqt; - vec_t const ywz, gab, tqp; - vec_t const yww, gaa, tqq; - vec_t const zxx, brr, pss; - vec_t const zxy, brg, pst; - vec_t const zxz, brb, psp; - vec_t const zxw, bra, psq; - vec_t const zyx, bgr, pts; - vec_t const zyy, bgg, ptt; - vec_t const zyz, bgb, ptp; - vec_t const zyw, bga, ptq; - vec_t const zzx, bbr, pps; - vec_t const zzy, bbg, ppt; - vec_t const zzz, bbb, ppp; - vec_t const zzw, bba, ppq; - vec_t const zwx, bar, pqs; - vec_t const zwy, bag, pqt; - vec_t const zwz, bab, pqp; - vec_t const zww, baa, pqq; - vec_t const wxx, arr, qss; - vec_t const wxy, arg, qst; - vec_t const wxz, arb, qsp; - vec_t const wxw, ara, qsq; - vec_t const wyx, agr, qts; - vec_t const wyy, agg, qtt; - vec_t const wyz, agb, qtp; - vec_t const wyw, aga, qtq; - vec_t const wzx, abr, qps; - vec_t const wzy, abg, qpt; - vec_t const wzz, abb, qpp; - vec_t const wzw, aba, qpq; - vec_t const wwx, aar, qqs; - vec_t const wwy, aag, qqt; - vec_t const wwz, aab, qqp; - vec_t const www, aaa, qqq; - - vec_t const xxxx, rrrr, ssss; - vec_t const xxxy, rrrg, ssst; - vec_t const xxxz, rrrb, sssp; - vec_t const xxxw, rrra, sssq; - vec_t const xxyx, rrgr, ssts; - vec_t const xxyy, rrgg, sstt; - vec_t const xxyz, rrgb, sstp; - vec_t const xxyw, rrga, sstq; - vec_t const xxzx, rrbr, ssps; - vec_t const xxzy, rrbg, sspt; - vec_t const xxzz, rrbb, sspp; - vec_t const xxzw, rrba, sspq; - vec_t const xxwx, rrar, ssqs; - vec_t const xxwy, rrag, ssqt; - vec_t const xxwz, rrab, ssqp; - vec_t const xxww, rraa, ssqq; - vec_t const xyxx, rgrr, stss; - vec_t const xyxy, rgrg, stst; - vec_t const xyxz, rgrb, stsp; - vec_t const xyxw, rgra, stsq; - vec_t const xyyx, rggr, stts; - vec_t const xyyy, rggg, sttt; - vec_t const xyyz, rggb, sttp; - vec_t const xyyw, rgga, sttq; - vec_t const xyzx, rgbr, stps; - vec_t const xyzy, rgbg, stpt; - vec_t const xyzz, rgbb, stpp; - vec_t const xyzw, rgba, stpq; - vec_t const xywx, rgar, stqs; - vec_t const xywy, rgag, stqt; - vec_t const xywz, rgab, stqp; - vec_t const xyww, rgaa, stqq; - vec_t const xzxx, rbrr, spss; - vec_t const xzxy, rbrg, spst; - vec_t const xzxz, rbrb, spsp; - vec_t const xzxw, rbra, spsq; - vec_t const xzyx, rbgr, spts; - vec_t const xzyy, rbgg, sptt; - vec_t const xzyz, rbgb, sptp; - vec_t const xzyw, rbga, sptq; - vec_t const xzzx, rbbr, spps; - vec_t const xzzy, rbbg, sppt; - vec_t const xzzz, rbbb, sppp; - vec_t const xzzw, rbba, sppq; - vec_t const xzwx, rbar, spqs; - vec_t const xzwy, rbag, spqt; - vec_t const xzwz, rbab, spqp; - vec_t const xzww, rbaa, spqq; - vec_t const xwxx, rarr, sqss; - vec_t const xwxy, rarg, sqst; - vec_t const xwxz, rarb, sqsp; - vec_t const xwxw, rara, sqsq; - vec_t const xwyx, ragr, sqts; - vec_t const xwyy, ragg, sqtt; - vec_t const xwyz, ragb, sqtp; - vec_t const xwyw, raga, sqtq; - vec_t const xwzx, rabr, sqps; - vec_t const xwzy, rabg, sqpt; - vec_t const xwzz, rabb, sqpp; - vec_t const xwzw, raba, sqpq; - vec_t const xwwx, raar, sqqs; - vec_t const xwwy, raag, sqqt; - vec_t const xwwz, raab, sqqp; - vec_t const xwww, raaa, sqqq; - vec_t const yxxx, grrr, tsss; - vec_t const yxxy, grrg, tsst; - vec_t const yxxz, grrb, tssp; - vec_t const yxxw, grra, tssq; - vec_t const yxyx, grgr, tsts; - vec_t const yxyy, grgg, tstt; - vec_t const yxyz, grgb, tstp; - vec_t const yxyw, grga, tstq; - vec_t const yxzx, grbr, tsps; - vec_t const yxzy, grbg, tspt; - vec_t const yxzz, grbb, tspp; - vec_t const yxzw, grba, tspq; - vec_t const yxwx, grar, tsqs; - vec_t const yxwy, grag, tsqt; - vec_t const yxwz, grab, tsqp; - vec_t const yxww, graa, tsqq; - vec_t const yyxx, ggrr, ttss; - vec_t const yyxy, ggrg, ttst; - vec_t const yyxz, ggrb, ttsp; - vec_t const yyxw, ggra, ttsq; - vec_t const yyyx, gggr, ttts; - vec_t const yyyy, gggg, tttt; - vec_t const yyyz, gggb, tttp; - vec_t const yyyw, ggga, tttq; - vec_t const yyzx, ggbr, ttps; - vec_t const yyzy, ggbg, ttpt; - vec_t const yyzz, ggbb, ttpp; - vec_t const yyzw, ggba, ttpq; - vec_t const yywx, ggar, ttqs; - vec_t const yywy, ggag, ttqt; - vec_t const yywz, ggab, ttqp; - vec_t const yyww, ggaa, ttqq; - vec_t const yzxx, gbrr, tpss; - vec_t const yzxy, gbrg, tpst; - vec_t const yzxz, gbrb, tpsp; - vec_t const yzxw, gbra, tpsq; - vec_t const yzyx, gbgr, tpts; - vec_t const yzyy, gbgg, tptt; - vec_t const yzyz, gbgb, tptp; - vec_t const yzyw, gbga, tptq; - vec_t const yzzx, gbbr, tpps; - vec_t const yzzy, gbbg, tppt; - vec_t const yzzz, gbbb, tppp; - vec_t const yzzw, gbba, tppq; - vec_t const yzwx, gbar, tpqs; - vec_t const yzwy, gbag, tpqt; - vec_t const yzwz, gbab, tpqp; - vec_t const yzww, gbaa, tpqq; - vec_t const ywxx, garr, tqss; - vec_t const ywxy, garg, tqst; - vec_t const ywxz, garb, tqsp; - vec_t const ywxw, gara, tqsq; - vec_t const ywyx, gagr, tqts; - vec_t const ywyy, gagg, tqtt; - vec_t const ywyz, gagb, tqtp; - vec_t const ywyw, gaga, tqtq; - vec_t const ywzx, gabr, tqps; - vec_t const ywzy, gabg, tqpt; - vec_t const ywzz, gabb, tqpp; - vec_t const ywzw, gaba, tqpq; - vec_t const ywwx, gaar, tqqs; - vec_t const ywwy, gaag, tqqt; - vec_t const ywwz, gaab, tqqp; - vec_t const ywww, gaaa, tqqq; - vec_t const zxxx, brrr, psss; - vec_t const zxxy, brrg, psst; - vec_t const zxxz, brrb, pssp; - vec_t const zxxw, brra, pssq; - vec_t const zxyx, brgr, psts; - vec_t const zxyy, brgg, pstt; - vec_t const zxyz, brgb, pstp; - vec_t const zxyw, brga, pstq; - vec_t const zxzx, brbr, psps; - vec_t const zxzy, brbg, pspt; - vec_t const zxzz, brbb, pspp; - vec_t const zxzw, brba, pspq; - vec_t const zxwx, brar, psqs; - vec_t const zxwy, brag, psqt; - vec_t const zxwz, brab, psqp; - vec_t const zxww, braa, psqq; - vec_t const zyxx, bgrr, ptss; - vec_t const zyxy, bgrg, ptst; - vec_t const zyxz, bgrb, ptsp; - vec_t const zyxw, bgra, ptsq; - vec_t const zyyx, bggr, ptts; - vec_t const zyyy, bggg, pttt; - vec_t const zyyz, bggb, pttp; - vec_t const zyyw, bgga, pttq; - vec_t const zyzx, bgbr, ptps; - vec_t const zyzy, bgbg, ptpt; - vec_t const zyzz, bgbb, ptpp; - vec_t const zyzw, bgba, ptpq; - vec_t const zywx, bgar, ptqs; - vec_t const zywy, bgag, ptqt; - vec_t const zywz, bgab, ptqp; - vec_t const zyww, bgaa, ptqq; - vec_t const zzxx, bbrr, ppss; - vec_t const zzxy, bbrg, ppst; - vec_t const zzxz, bbrb, ppsp; - vec_t const zzxw, bbra, ppsq; - vec_t const zzyx, bbgr, ppts; - vec_t const zzyy, bbgg, pptt; - vec_t const zzyz, bbgb, pptp; - vec_t const zzyw, bbga, pptq; - vec_t const zzzx, bbbr, ppps; - vec_t const zzzy, bbbg, pppt; - vec_t const zzzz, bbbb, pppp; - vec_t const zzzw, bbba, pppq; - vec_t const zzwx, bbar, ppqs; - vec_t const zzwy, bbag, ppqt; - vec_t const zzwz, bbab, ppqp; - vec_t const zzww, bbaa, ppqq; - vec_t const zwxx, barr, pqss; - vec_t const zwxy, barg, pqst; - vec_t const zwxz, barb, pqsp; - vec_t const zwxw, bara, pqsq; - vec_t const zwyx, bagr, pqts; - vec_t const zwyy, bagg, pqtt; - vec_t const zwyz, bagb, pqtp; - vec_t const zwyw, baga, pqtq; - vec_t const zwzx, babr, pqps; - vec_t const zwzy, babg, pqpt; - vec_t const zwzz, babb, pqpp; - vec_t const zwzw, baba, pqpq; - vec_t const zwwx, baar, pqqs; - vec_t const zwwy, baag, pqqt; - vec_t const zwwz, baab, pqqp; - vec_t const zwww, baaa, pqqq; - vec_t const wxxx, arrr, qsss; - vec_t const wxxy, arrg, qsst; - vec_t const wxxz, arrb, qssp; - vec_t const wxxw, arra, qssq; - vec_t const wxyx, argr, qsts; - vec_t const wxyy, argg, qstt; - vec_t const wxyz, argb, qstp; - vec_t const wxyw, arga, qstq; - vec_t const wxzx, arbr, qsps; - vec_t const wxzy, arbg, qspt; - vec_t const wxzz, arbb, qspp; - vec_t const wxzw, arba, qspq; - vec_t const wxwx, arar, qsqs; - vec_t const wxwy, arag, qsqt; - vec_t const wxwz, arab, qsqp; - vec_t const wxww, araa, qsqq; - vec_t const wyxx, agrr, qtss; - vec_t const wyxy, agrg, qtst; - vec_t const wyxz, agrb, qtsp; - vec_t const wyxw, agra, qtsq; - vec_t const wyyx, aggr, qtts; - vec_t const wyyy, aggg, qttt; - vec_t const wyyz, aggb, qttp; - vec_t const wyyw, agga, qttq; - vec_t const wyzx, agbr, qtps; - vec_t const wyzy, agbg, qtpt; - vec_t const wyzz, agbb, qtpp; - vec_t const wyzw, agba, qtpq; - vec_t const wywx, agar, qtqs; - vec_t const wywy, agag, qtqt; - vec_t const wywz, agab, qtqp; - vec_t const wyww, agaa, qtqq; - vec_t const wzxx, abrr, qpss; - vec_t const wzxy, abrg, qpst; - vec_t const wzxz, abrb, qpsp; - vec_t const wzxw, abra, qpsq; - vec_t const wzyx, abgr, qpts; - vec_t const wzyy, abgg, qptt; - vec_t const wzyz, abgb, qptp; - vec_t const wzyw, abga, qptq; - vec_t const wzzx, abbr, qpps; - vec_t const wzzy, abbg, qppt; - vec_t const wzzz, abbb, qppp; - vec_t const wzzw, abba, qppq; - vec_t const wzwx, abar, qpqs; - vec_t const wzwy, abag, qpqt; - vec_t const wzwz, abab, qpqp; - vec_t const wzww, abaa, qpqq; - vec_t const wwxx, aarr, qqss; - vec_t const wwxy, aarg, qqst; - vec_t const wwxz, aarb, qqsp; - vec_t const wwxw, aara, qqsq; - vec_t const wwyx, aagr, qqts; - vec_t const wwyy, aagg, qqtt; - vec_t const wwyz, aagb, qqtp; - vec_t const wwyw, aaga, qqtq; - vec_t const wwzx, aabr, qqps; - vec_t const wwzy, aabg, qqpt; - vec_t const wwzz, aabb, qqpp; - vec_t const wwzw, aaba, qqpq; - vec_t const wwwx, aaar, qqqs; - vec_t const wwwy, aaag, qqqt; - vec_t const wwwz, aaab, qqqp; - vec_t const wwww, aaaa, qqqq; + vec_t const xx, rr, ss; + vec_t const xy, rg, st; + vec_t const xz, rb, sp; + vec_t const xw, ra, sq; + vec_t const yx, gr, ts; + vec_t const yy, gg, tt; + vec_t const yz, gb, tp; + vec_t const yw, ga, tq; + vec_t const zx, br, ps; + vec_t const zy, bg, pt; + vec_t const zz, bb, pp; + vec_t const zw, ba, pq; + vec_t const wx, ar, qs; + vec_t const wy, ag, qt; + vec_t const wz, ab, qp; + vec_t const ww, aa, qq; + + vec_t const xxx, rrr, sss; + vec_t const xxy, rrg, sst; + vec_t const xxz, rrb, ssp; + vec_t const xxw, rra, ssq; + vec_t const xyx, rgr, sts; + vec_t const xyy, rgg, stt; + vec_t const xyz, rgb, stp; + vec_t const xyw, rga, stq; + vec_t const xzx, rbr, sps; + vec_t const xzy, rbg, spt; + vec_t const xzz, rbb, spp; + vec_t const xzw, rba, spq; + vec_t const xwx, rar, sqs; + vec_t const xwy, rag, sqt; + vec_t const xwz, rab, sqp; + vec_t const xww, raa, sqq; + vec_t const yxx, grr, tss; + vec_t const yxy, grg, tst; + vec_t const yxz, grb, tsp; + vec_t const yxw, gra, tsq; + vec_t const yyx, ggr, tts; + vec_t const yyy, ggg, ttt; + vec_t const yyz, ggb, ttp; + vec_t const yyw, gga, ttq; + vec_t const yzx, gbr, tps; + vec_t const yzy, gbg, tpt; + vec_t const yzz, gbb, tpp; + vec_t const yzw, gba, tpq; + vec_t const ywx, gar, tqs; + vec_t const ywy, gag, tqt; + vec_t const ywz, gab, tqp; + vec_t const yww, gaa, tqq; + vec_t const zxx, brr, pss; + vec_t const zxy, brg, pst; + vec_t const zxz, brb, psp; + vec_t const zxw, bra, psq; + vec_t const zyx, bgr, pts; + vec_t const zyy, bgg, ptt; + vec_t const zyz, bgb, ptp; + vec_t const zyw, bga, ptq; + vec_t const zzx, bbr, pps; + vec_t const zzy, bbg, ppt; + vec_t const zzz, bbb, ppp; + vec_t const zzw, bba, ppq; + vec_t const zwx, bar, pqs; + vec_t const zwy, bag, pqt; + vec_t const zwz, bab, pqp; + vec_t const zww, baa, pqq; + vec_t const wxx, arr, qss; + vec_t const wxy, arg, qst; + vec_t const wxz, arb, qsp; + vec_t const wxw, ara, qsq; + vec_t const wyx, agr, qts; + vec_t const wyy, agg, qtt; + vec_t const wyz, agb, qtp; + vec_t const wyw, aga, qtq; + vec_t const wzx, abr, qps; + vec_t const wzy, abg, qpt; + vec_t const wzz, abb, qpp; + vec_t const wzw, aba, qpq; + vec_t const wwx, aar, qqs; + vec_t const wwy, aag, qqt; + vec_t const wwz, aab, qqp; + vec_t const www, aaa, qqq; + + vec_t const xxxx, rrrr, ssss; + vec_t const xxxy, rrrg, ssst; + vec_t const xxxz, rrrb, sssp; + vec_t const xxxw, rrra, sssq; + vec_t const xxyx, rrgr, ssts; + vec_t const xxyy, rrgg, sstt; + vec_t const xxyz, rrgb, sstp; + vec_t const xxyw, rrga, sstq; + vec_t const xxzx, rrbr, ssps; + vec_t const xxzy, rrbg, sspt; + vec_t const xxzz, rrbb, sspp; + vec_t const xxzw, rrba, sspq; + vec_t const xxwx, rrar, ssqs; + vec_t const xxwy, rrag, ssqt; + vec_t const xxwz, rrab, ssqp; + vec_t const xxww, rraa, ssqq; + vec_t const xyxx, rgrr, stss; + vec_t const xyxy, rgrg, stst; + vec_t const xyxz, rgrb, stsp; + vec_t const xyxw, rgra, stsq; + vec_t const xyyx, rggr, stts; + vec_t const xyyy, rggg, sttt; + vec_t const xyyz, rggb, sttp; + vec_t const xyyw, rgga, sttq; + vec_t const xyzx, rgbr, stps; + vec_t const xyzy, rgbg, stpt; + vec_t const xyzz, rgbb, stpp; + vec_t const xyzw, rgba, stpq; + vec_t const xywx, rgar, stqs; + vec_t const xywy, rgag, stqt; + vec_t const xywz, rgab, stqp; + vec_t const xyww, rgaa, stqq; + vec_t const xzxx, rbrr, spss; + vec_t const xzxy, rbrg, spst; + vec_t const xzxz, rbrb, spsp; + vec_t const xzxw, rbra, spsq; + vec_t const xzyx, rbgr, spts; + vec_t const xzyy, rbgg, sptt; + vec_t const xzyz, rbgb, sptp; + vec_t const xzyw, rbga, sptq; + vec_t const xzzx, rbbr, spps; + vec_t const xzzy, rbbg, sppt; + vec_t const xzzz, rbbb, sppp; + vec_t const xzzw, rbba, sppq; + vec_t const xzwx, rbar, spqs; + vec_t const xzwy, rbag, spqt; + vec_t const xzwz, rbab, spqp; + vec_t const xzww, rbaa, spqq; + vec_t const xwxx, rarr, sqss; + vec_t const xwxy, rarg, sqst; + vec_t const xwxz, rarb, sqsp; + vec_t const xwxw, rara, sqsq; + vec_t const xwyx, ragr, sqts; + vec_t const xwyy, ragg, sqtt; + vec_t const xwyz, ragb, sqtp; + vec_t const xwyw, raga, sqtq; + vec_t const xwzx, rabr, sqps; + vec_t const xwzy, rabg, sqpt; + vec_t const xwzz, rabb, sqpp; + vec_t const xwzw, raba, sqpq; + vec_t const xwwx, raar, sqqs; + vec_t const xwwy, raag, sqqt; + vec_t const xwwz, raab, sqqp; + vec_t const xwww, raaa, sqqq; + vec_t const yxxx, grrr, tsss; + vec_t const yxxy, grrg, tsst; + vec_t const yxxz, grrb, tssp; + vec_t const yxxw, grra, tssq; + vec_t const yxyx, grgr, tsts; + vec_t const yxyy, grgg, tstt; + vec_t const yxyz, grgb, tstp; + vec_t const yxyw, grga, tstq; + vec_t const yxzx, grbr, tsps; + vec_t const yxzy, grbg, tspt; + vec_t const yxzz, grbb, tspp; + vec_t const yxzw, grba, tspq; + vec_t const yxwx, grar, tsqs; + vec_t const yxwy, grag, tsqt; + vec_t const yxwz, grab, tsqp; + vec_t const yxww, graa, tsqq; + vec_t const yyxx, ggrr, ttss; + vec_t const yyxy, ggrg, ttst; + vec_t const yyxz, ggrb, ttsp; + vec_t const yyxw, ggra, ttsq; + vec_t const yyyx, gggr, ttts; + vec_t const yyyy, gggg, tttt; + vec_t const yyyz, gggb, tttp; + vec_t const yyyw, ggga, tttq; + vec_t const yyzx, ggbr, ttps; + vec_t const yyzy, ggbg, ttpt; + vec_t const yyzz, ggbb, ttpp; + vec_t const yyzw, ggba, ttpq; + vec_t const yywx, ggar, ttqs; + vec_t const yywy, ggag, ttqt; + vec_t const yywz, ggab, ttqp; + vec_t const yyww, ggaa, ttqq; + vec_t const yzxx, gbrr, tpss; + vec_t const yzxy, gbrg, tpst; + vec_t const yzxz, gbrb, tpsp; + vec_t const yzxw, gbra, tpsq; + vec_t const yzyx, gbgr, tpts; + vec_t const yzyy, gbgg, tptt; + vec_t const yzyz, gbgb, tptp; + vec_t const yzyw, gbga, tptq; + vec_t const yzzx, gbbr, tpps; + vec_t const yzzy, gbbg, tppt; + vec_t const yzzz, gbbb, tppp; + vec_t const yzzw, gbba, tppq; + vec_t const yzwx, gbar, tpqs; + vec_t const yzwy, gbag, tpqt; + vec_t const yzwz, gbab, tpqp; + vec_t const yzww, gbaa, tpqq; + vec_t const ywxx, garr, tqss; + vec_t const ywxy, garg, tqst; + vec_t const ywxz, garb, tqsp; + vec_t const ywxw, gara, tqsq; + vec_t const ywyx, gagr, tqts; + vec_t const ywyy, gagg, tqtt; + vec_t const ywyz, gagb, tqtp; + vec_t const ywyw, gaga, tqtq; + vec_t const ywzx, gabr, tqps; + vec_t const ywzy, gabg, tqpt; + vec_t const ywzz, gabb, tqpp; + vec_t const ywzw, gaba, tqpq; + vec_t const ywwx, gaar, tqqs; + vec_t const ywwy, gaag, tqqt; + vec_t const ywwz, gaab, tqqp; + vec_t const ywww, gaaa, tqqq; + vec_t const zxxx, brrr, psss; + vec_t const zxxy, brrg, psst; + vec_t const zxxz, brrb, pssp; + vec_t const zxxw, brra, pssq; + vec_t const zxyx, brgr, psts; + vec_t const zxyy, brgg, pstt; + vec_t const zxyz, brgb, pstp; + vec_t const zxyw, brga, pstq; + vec_t const zxzx, brbr, psps; + vec_t const zxzy, brbg, pspt; + vec_t const zxzz, brbb, pspp; + vec_t const zxzw, brba, pspq; + vec_t const zxwx, brar, psqs; + vec_t const zxwy, brag, psqt; + vec_t const zxwz, brab, psqp; + vec_t const zxww, braa, psqq; + vec_t const zyxx, bgrr, ptss; + vec_t const zyxy, bgrg, ptst; + vec_t const zyxz, bgrb, ptsp; + vec_t const zyxw, bgra, ptsq; + vec_t const zyyx, bggr, ptts; + vec_t const zyyy, bggg, pttt; + vec_t const zyyz, bggb, pttp; + vec_t const zyyw, bgga, pttq; + vec_t const zyzx, bgbr, ptps; + vec_t const zyzy, bgbg, ptpt; + vec_t const zyzz, bgbb, ptpp; + vec_t const zyzw, bgba, ptpq; + vec_t const zywx, bgar, ptqs; + vec_t const zywy, bgag, ptqt; + vec_t const zywz, bgab, ptqp; + vec_t const zyww, bgaa, ptqq; + vec_t const zzxx, bbrr, ppss; + vec_t const zzxy, bbrg, ppst; + vec_t const zzxz, bbrb, ppsp; + vec_t const zzxw, bbra, ppsq; + vec_t const zzyx, bbgr, ppts; + vec_t const zzyy, bbgg, pptt; + vec_t const zzyz, bbgb, pptp; + vec_t const zzyw, bbga, pptq; + vec_t const zzzx, bbbr, ppps; + vec_t const zzzy, bbbg, pppt; + vec_t const zzzz, bbbb, pppp; + vec_t const zzzw, bbba, pppq; + vec_t const zzwx, bbar, ppqs; + vec_t const zzwy, bbag, ppqt; + vec_t const zzwz, bbab, ppqp; + vec_t const zzww, bbaa, ppqq; + vec_t const zwxx, barr, pqss; + vec_t const zwxy, barg, pqst; + vec_t const zwxz, barb, pqsp; + vec_t const zwxw, bara, pqsq; + vec_t const zwyx, bagr, pqts; + vec_t const zwyy, bagg, pqtt; + vec_t const zwyz, bagb, pqtp; + vec_t const zwyw, baga, pqtq; + vec_t const zwzx, babr, pqps; + vec_t const zwzy, babg, pqpt; + vec_t const zwzz, babb, pqpp; + vec_t const zwzw, baba, pqpq; + vec_t const zwwx, baar, pqqs; + vec_t const zwwy, baag, pqqt; + vec_t const zwwz, baab, pqqp; + vec_t const zwww, baaa, pqqq; + vec_t const wxxx, arrr, qsss; + vec_t const wxxy, arrg, qsst; + vec_t const wxxz, arrb, qssp; + vec_t const wxxw, arra, qssq; + vec_t const wxyx, argr, qsts; + vec_t const wxyy, argg, qstt; + vec_t const wxyz, argb, qstp; + vec_t const wxyw, arga, qstq; + vec_t const wxzx, arbr, qsps; + vec_t const wxzy, arbg, qspt; + vec_t const wxzz, arbb, qspp; + vec_t const wxzw, arba, qspq; + vec_t const wxwx, arar, qsqs; + vec_t const wxwy, arag, qsqt; + vec_t const wxwz, arab, qsqp; + vec_t const wxww, araa, qsqq; + vec_t const wyxx, agrr, qtss; + vec_t const wyxy, agrg, qtst; + vec_t const wyxz, agrb, qtsp; + vec_t const wyxw, agra, qtsq; + vec_t const wyyx, aggr, qtts; + vec_t const wyyy, aggg, qttt; + vec_t const wyyz, aggb, qttp; + vec_t const wyyw, agga, qttq; + vec_t const wyzx, agbr, qtps; + vec_t const wyzy, agbg, qtpt; + vec_t const wyzz, agbb, qtpp; + vec_t const wyzw, agba, qtpq; + vec_t const wywx, agar, qtqs; + vec_t const wywy, agag, qtqt; + vec_t const wywz, agab, qtqp; + vec_t const wyww, agaa, qtqq; + vec_t const wzxx, abrr, qpss; + vec_t const wzxy, abrg, qpst; + vec_t const wzxz, abrb, qpsp; + vec_t const wzxw, abra, qpsq; + vec_t const wzyx, abgr, qpts; + vec_t const wzyy, abgg, qptt; + vec_t const wzyz, abgb, qptp; + vec_t const wzyw, abga, qptq; + vec_t const wzzx, abbr, qpps; + vec_t const wzzy, abbg, qppt; + vec_t const wzzz, abbb, qppp; + vec_t const wzzw, abba, qppq; + vec_t const wzwx, abar, qpqs; + vec_t const wzwy, abag, qpqt; + vec_t const wzwz, abab, qpqp; + vec_t const wzww, abaa, qpqq; + vec_t const wwxx, aarr, qqss; + vec_t const wwxy, aarg, qqst; + vec_t const wwxz, aarb, qqsp; + vec_t const wwxw, aara, qqsq; + vec_t const wwyx, aagr, qqts; + vec_t const wwyy, aagg, qqtt; + vec_t const wwyz, aagb, qqtp; + vec_t const wwyw, aaga, qqtq; + vec_t const wwzx, aabr, qqps; + vec_t const wwzy, aabg, qqpt; + vec_t const wwzz, aabb, qqpp; + vec_t const wwzw, aaba, qqpq; + vec_t const wwwx, aaar, qqqs; + vec_t const wwwy, aaag, qqqt; + vec_t const wwwz, aaab, qqqp; + vec_t const wwww, aaaa, qqqq; #endif T m_data[count];