@@ -337,6 +337,64 @@ public nint GetLastNonZeroIndex()
337337 }
338338 }
339339
340+ /// <summary>
341+ /// Transpose the block inplace.
342+ /// </summary>
343+ [ MethodImpl ( InliningOptions . ShortMethod ) ]
344+ public void TransposeInplace ( )
345+ {
346+ ref short elemRef = ref Unsafe . As < Block8x8 , short > ( ref this ) ;
347+
348+ // row #0
349+ Swap ( ref Unsafe . Add ( ref elemRef , 1 ) , ref Unsafe . Add ( ref elemRef , 8 ) ) ;
350+ Swap ( ref Unsafe . Add ( ref elemRef , 2 ) , ref Unsafe . Add ( ref elemRef , 16 ) ) ;
351+ Swap ( ref Unsafe . Add ( ref elemRef , 3 ) , ref Unsafe . Add ( ref elemRef , 24 ) ) ;
352+ Swap ( ref Unsafe . Add ( ref elemRef , 4 ) , ref Unsafe . Add ( ref elemRef , 32 ) ) ;
353+ Swap ( ref Unsafe . Add ( ref elemRef , 5 ) , ref Unsafe . Add ( ref elemRef , 40 ) ) ;
354+ Swap ( ref Unsafe . Add ( ref elemRef , 6 ) , ref Unsafe . Add ( ref elemRef , 48 ) ) ;
355+ Swap ( ref Unsafe . Add ( ref elemRef , 7 ) , ref Unsafe . Add ( ref elemRef , 56 ) ) ;
356+
357+ // row #1
358+ Swap ( ref Unsafe . Add ( ref elemRef , 10 ) , ref Unsafe . Add ( ref elemRef , 17 ) ) ;
359+ Swap ( ref Unsafe . Add ( ref elemRef , 11 ) , ref Unsafe . Add ( ref elemRef , 25 ) ) ;
360+ Swap ( ref Unsafe . Add ( ref elemRef , 12 ) , ref Unsafe . Add ( ref elemRef , 33 ) ) ;
361+ Swap ( ref Unsafe . Add ( ref elemRef , 13 ) , ref Unsafe . Add ( ref elemRef , 41 ) ) ;
362+ Swap ( ref Unsafe . Add ( ref elemRef , 14 ) , ref Unsafe . Add ( ref elemRef , 49 ) ) ;
363+ Swap ( ref Unsafe . Add ( ref elemRef , 15 ) , ref Unsafe . Add ( ref elemRef , 57 ) ) ;
364+
365+ // row #2
366+ Swap ( ref Unsafe . Add ( ref elemRef , 19 ) , ref Unsafe . Add ( ref elemRef , 26 ) ) ;
367+ Swap ( ref Unsafe . Add ( ref elemRef , 20 ) , ref Unsafe . Add ( ref elemRef , 34 ) ) ;
368+ Swap ( ref Unsafe . Add ( ref elemRef , 21 ) , ref Unsafe . Add ( ref elemRef , 42 ) ) ;
369+ Swap ( ref Unsafe . Add ( ref elemRef , 22 ) , ref Unsafe . Add ( ref elemRef , 50 ) ) ;
370+ Swap ( ref Unsafe . Add ( ref elemRef , 23 ) , ref Unsafe . Add ( ref elemRef , 58 ) ) ;
371+
372+ // row #3
373+ Swap ( ref Unsafe . Add ( ref elemRef , 28 ) , ref Unsafe . Add ( ref elemRef , 35 ) ) ;
374+ Swap ( ref Unsafe . Add ( ref elemRef , 29 ) , ref Unsafe . Add ( ref elemRef , 43 ) ) ;
375+ Swap ( ref Unsafe . Add ( ref elemRef , 30 ) , ref Unsafe . Add ( ref elemRef , 51 ) ) ;
376+ Swap ( ref Unsafe . Add ( ref elemRef , 31 ) , ref Unsafe . Add ( ref elemRef , 59 ) ) ;
377+
378+ // row #4
379+ Swap ( ref Unsafe . Add ( ref elemRef , 37 ) , ref Unsafe . Add ( ref elemRef , 44 ) ) ;
380+ Swap ( ref Unsafe . Add ( ref elemRef , 38 ) , ref Unsafe . Add ( ref elemRef , 52 ) ) ;
381+ Swap ( ref Unsafe . Add ( ref elemRef , 39 ) , ref Unsafe . Add ( ref elemRef , 60 ) ) ;
382+
383+ // row #5
384+ Swap ( ref Unsafe . Add ( ref elemRef , 46 ) , ref Unsafe . Add ( ref elemRef , 53 ) ) ;
385+ Swap ( ref Unsafe . Add ( ref elemRef , 47 ) , ref Unsafe . Add ( ref elemRef , 61 ) ) ;
386+
387+ // row #6
388+ Swap ( ref Unsafe . Add ( ref elemRef , 55 ) , ref Unsafe . Add ( ref elemRef , 62 ) ) ;
389+
390+ static void Swap ( ref short a , ref short b )
391+ {
392+ short tmp = a ;
393+ a = b ;
394+ b = tmp ;
395+ }
396+ }
397+
340398 /// <summary>
341399 /// Calculate the total sum of absolute differences of elements in 'a' and 'b'.
342400 /// </summary>
0 commit comments