f512 :: V.Vector Word64 -> V.Vector Word64 -> V.Vector Word64
f512 !h !m = V.zipWith3 xor3 h (permP inP) (permQ m)
    where xor3 x1 x2 x3 = x1 `xor` x2 `xor` x3
          inP = V.zipWith xor h m
{-
f512 h m = V.force outP `par` (V.force outQ `pseq` (V.zipWith3 xor3 h outP outQ))
    where xor3 x1 x2 x3 = x1 `xor` x2 `xor` x3
          inP = V.zipWith xor h m
          outP = permP inP
          outQ = permQ m
-}
f512 :: V.Vector Word64 -> V.Vector Word64 -> V.Vector Word64
f512 !h !m = V.zipWith3 xor3 h (permP inP) (permQ m)
    where xor3 x1 x2 x3 = x1 `xor` x2 `xor` x3
          inP = V.zipWith xor h m
{-
f512 h m = V.force outP `par` (V.force outQ `pseq` (V.zipWith3 xor3 h outP outQ))
    where xor3 x1 x2 x3 = x1 `xor` x2 `xor` x3
          inP = V.zipWith xor h m
          outP = permP inP
          outQ = permQ m
-}
f512 !h !m = V.zipWith3 xor3 h (permP inP) (permQ m)
    where xor3 x1 x2 x3 = x1 `xor` x2 `xor` x3
          inP = V.zipWith xor h m
{-
f512 h m = V.force outP `par` (V.force outQ `pseq` (V.zipWith3 xor3 h outP outQ))
    where xor3 x1 x2 x3 = x1 `xor` x2 `xor` x3
          inP = V.zipWith xor h m
          outP = permP inP
          outQ = permQ m
-}