@@ -52,11 +52,24 @@ namespace xsimd
5252 static_assert (is_dup_hi<std::uint32_t , 2 , 3 , 2 , 3 >(), " 4-lane dup_hi failed" );
5353 static_assert (!is_dup_lo<std::uint32_t , 2 , 3 , 2 , 3 >(), " 4-lane dup_lo on dup_hi" );
5454
55- static_assert (is_cross_lane<0 , 1 , 0 , 1 >(), " dup-lo only → crossing" );
56- static_assert (is_cross_lane<2 , 3 , 2 , 3 >(), " dup-hi only → crossing" );
57- static_assert (is_cross_lane<0 , 3 , 3 , 3 >(), " one low + rest high → crossing" );
58- static_assert (!is_cross_lane<1 , 0 , 2 , 3 >(), " mixed low/high → no crossing" );
59- static_assert (!is_cross_lane<0 , 1 , 2 , 3 >(), " mixed low/high → no crossing" );
55+ static_assert (is_cross_lane<double , 0 , 1 , 0 , 1 >(), " dup-lo only → crossing" );
56+ static_assert (is_cross_lane<double , 2 , 3 , 2 , 3 >(), " dup-hi only → crossing" );
57+ static_assert (is_cross_lane<double , 0 , 3 , 3 , 3 >(), " one low + rest high → crossing" );
58+ static_assert (!is_cross_lane<double , 1 , 0 , 2 , 3 >(), " mixed low/high → no crossing" );
59+ static_assert (!is_cross_lane<double , 0 , 1 , 2 , 3 >(), " mixed low/high → no crossing" );
60+ // 8-lane 128-bit lane checks (use double/int64 for 2-elements-per-128-bit lanes)
61+ static_assert (is_cross_lane<double , 3 , 2 , 1 , 0 , 7 , 6 , 5 , 4 >(), " 8-lane 128-bit swap → crossing" );
62+ static_assert (!is_cross_lane<double , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 >(), " identity 8-lane → no crossing" );
63+ static_assert (is_cross_lane<std::uint64_t , 3 , 2 , 1 , 0 , 7 , 6 , 5 , 4 >(), " 8-lane uint64_t swap → crossing" );
64+ static_assert (is_cross_lane<std::int32_t , 4 , 5 , 6 , 7 , 0 , 1 , 2 , 3 >(), " 8-lane int32_t swap → crossing" );
65+
66+ // Additional compile-time checks for 16-element batches (e.g. float/int32)
67+ static_assert (is_cross_lane<float , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 >(),
68+ " 16-lane 128-bit swap → crossing" );
69+ static_assert (!is_cross_lane<float , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 >(),
70+ " identity 16-lane → no crossing" );
71+ static_assert (is_cross_lane<std::uint32_t , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 >(),
72+ " 16-lane uint32_t swap → crossing" );
6073 }
6174 }
6275}
0 commit comments