         [ d a b c 2  S22 30 ]
         [ c d a b 7  S23 31 ]
         [ b c d a 12 S24 32 ]
-    } [ G ] with-md5-round ;
+    } [ G ] with-md5-round ; inline
 
-: (process-md5-block-H) ( block -- )
+: (process-md5-block-H) ( block v -- )
     {
         [ a b c d 5  S31 33 ]
         [ d a b c 8  S32 34 ]

        [ d a b c 13 S12 14 ]
        [ c d a b 14 S13 15 ]
        [ b c d a 15 S14 16 ]
    } [ F ] with-md5-round ;

: (process-md5-block-G) ( block -- )
    {
        [ a b c d 1  S21 17 ]
        [ d a b c 6  S22 18 ]

CONSTANT: S43 15
CONSTANT: S44 21

CONSTANT: a 0
CONSTANT: b 1
CONSTANT: c 2
CONSTANT: d 3

:: (ABCD) ( x V a b c d k s i quot -- )
    #! a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s)
    a V [
        b V nth-unsafe
        c V nth-unsafe
        d V nth-unsafe quot call w+
        k x nth-unsafe w+
        i T w+
        s bitroll-32
        b V nth-unsafe w+
    ] change-nth ; inline

MACRO: with-md5-round ( ops quot -- )
    '[ [ _ (ABCD) ] compose ] map '[ _ 2cleave ] ;

: (process-md5-block-F) ( block v -- )
    {
        [ a b c d 0  S11 1  ]
        [ d a b c 1  S12 2  ]
