: gb2 ( a -- a2 ) -16 shift gb0 ; inline
: gb3 ( a -- a3 ) -24 shift gb0 ; inline
-#! pack 4 bytes into 32-bit unsigned int
-#! a3 is msb
+! pack 4 bytes into 32-bit unsigned int
+! a3 is msb
: >ui32 ( a0 a1 a2 a3 -- a )
[ 8 shift ] [ 16 shift ] [ 24 shift ] tri*
bitor bitor bitor 32 bits ;
-#! inverse of ui32
+! inverse of ui32
: ui32> ( word -- a0 a1 a2 a3 )
[ gb0 ] keep [ gb1 ] keep [ gb2 ] keep gb3 ; inline
} cleave .h .h .h .h ;
-#! given 4 columns, output the first diagonal, i.e.
-#! C[0,0] C[1,1] C[2,2] C[3,3]
+! given 4 columns, output the first diagonal, i.e.
+! C[0,0] C[1,1] C[2,2] C[3,3]
: first-diag ( c0 c1 c2 c3 -- a0 a1 a2 a3 )
{ [ gb3 ] [ gb2 ] [ gb1 ] [ gb0 ] } spread ;
: third-diag ( c0 c1 c2 c3 -- a0 a1 a2 a3 ) (4rot) second-diag ;
: fourth-diag ( c0 c1 c2 c3 -- a0 a1 a2 a3 ) (4rot) third-diag ;
-#! given 4 columns, output the first reverse diagonal, i.e.
-#! C[0,0] C[3,1] C[2,2] C[1,3]
+! given 4 columns, output the first reverse diagonal, i.e.
+! C[0,0] C[3,1] C[2,2] C[1,3]
:: (-rev) ( c0 c1 c2 c3 -- c0 c3 c2 c1 ) c0 c3 c2 c1 ; inline
: -first-diag ( c0 c1 c2 c3 -- a0 a1 a2 a3 ) (-rev) first-diag ;
: -second-diag ( c0 c1 c2 c3 -- a0 a1 a2 a3 ) (-rev) (4rot) first-diag ;