From 70f0901a7b1d044e18a1bbd3b9c0620bfc53f0db Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Fri, 2 Feb 2024 11:25:31 +0000 Subject: [PATCH] utils/permute.lisp: Add supporting diagrams for IP permutations. I decided I didn't want to lose these, and putting them in the main code seemed too cluttery. --- utils/permute.lisp | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) diff --git a/utils/permute.lisp b/utils/permute.lisp index 7c8bcbac..7d7cb563 100644 --- a/utils/permute.lisp +++ b/utils/permute.lisp @@ -634,6 +634,63 @@ (fixed-ip (map '(vector fixnum) (lambda (x) (- 64 x)) (reverse ip))) + + ;; The traditional network. (Exchange each `*' with the earliest + ;; available `#'.) + ;; + ;; - - - - - - - - 0 1 2 3 4 5 6 7 + ;; - - - - - - - - 8 9 10 11 12 13 14 15 + ;; - - - - - - - - 16 17 18 19 20 21 22 23 + ;; - - - - - - - - 24 25 26 27 28 29 30 31 + ;; - - - - - - - - 32 33 34 35 36 37 38 39 + ;; - - - - - - - - 40 41 42 43 44 45 46 47 + ;; - - - - - - - - 48 49 50 51 52 53 54 55 + ;; - - - - - - - - 56 57 58 59 60 61 62 63 + ;; + ;; * * * * - - - - 36 37 38 39 4 5 6 7 + ;; * * * * - - - - 44 45 46 47 12 13 14 15 + ;; * * * * - - - - 52 53 54 55 20 21 22 23 + ;; * * * * - - - - 60 61 62 63 28 29 30 31 + ;; - - - - # # # # 32 33 34 35 0 1 2 3 + ;; - - - - # # # # 40 41 42 43 8 9 10 11 + ;; - - - - # # # # 48 49 50 51 16 17 18 19 + ;; - - - - # # # # 56 57 58 59 24 25 26 27 + ;; + ;; * * - - * * - - 54 55 38 39 22 3 26 7 + ;; * * - - * * - - 62 63 46 47 30 11 34 15 + ;; - - # # - - # # 52 53 36 37 20 1 24 5 + ;; - - # # - - # # 60 61 44 45 28 19 22 13 + ;; * * - - * * - - 50 51 34 35 18 9 12 3 + ;; * * - - * * - - 58 59 42 43 26 17 20 11 + ;; - - # # - - # # 48 49 32 33 16 7 10 1 + ;; - - # # - - # # 56 57 40 41 24 5 28 9 + ;; + ;; * - * - * - * - 63 55 47 39 21 13 35 7 + ;; - # - # - # - # 62 54 46 38 20 12 34 6 + ;; * - * - * - * - 61 53 45 37 29 11 23 5 + ;; - # - # - # - # 60 52 44 36 28 10 22 4 + ;; * - * - * - * - 59 51 43 35 17 19 21 3 + ;; - # - # - # - # 58 50 42 34 16 18 20 2 + ;; * - * - * - * - 57 49 41 33 15 7 29 1 + ;; - # - # - # - # 56 48 40 32 14 6 28 0 + ;; + ;; * * * * * * * * 60 52 44 36 28 20 12 4 + ;; - - - - - - - - 62 54 46 38 30 22 14 6 + ;; - - - - - - - - 61 53 45 37 29 21 13 5 + ;; # # # # # # # # 63 55 47 39 31 23 15 7 + ;; * * * * * * * * 56 48 40 32 24 16 8 0 + ;; - - - - - - - - 58 50 42 34 26 18 10 2 + ;; - - - - - - - - 57 49 41 33 25 17 9 1 + ;; # # # # # # # # 59 51 43 35 27 19 11 3 + ;; + ;; * * * * * * * * 57 49 41 33 25 17 9 1 + ;; * * * * * * * * 59 51 43 35 27 19 11 3 + ;; - - - - - - - - 61 53 45 37 29 21 13 5 + ;; - - - - - - - - 63 55 47 39 31 23 15 7 + ;; - - - - - - - - 56 48 40 32 24 16 8 0 + ;; - - - - - - - - 58 50 42 34 26 18 10 2 + ;; # # # # # # # # 60 52 44 36 28 20 12 4 + ;; # # # # # # # # 62 54 46 38 30 22 14 6 (trad-network (make-permutation-network 64 ; 5 4 3 2 1 0 @@ -642,6 +699,63 @@ (:exchange-invert 0 3) ; ~2 ~1 ~0 ~5 ~4 ~3 (:exchange-invert 3 4) ; ~2 0 1 ~5 ~4 ~3 (:exchange-invert 4 5)))) ; ~0 2 1 ~5 ~4 ~3 + + ;; The new twizzle-optimized network. (Exchange each `*' with the + ;; earliest available `#'.) + ;; + ;; - - - - - - - - 0 1 2 3 4 5 6 7 + ;; - - - - - - - - 8 9 10 11 12 13 14 15 + ;; - - - - - - - - 16 17 18 19 20 21 22 23 + ;; - - - - - - - - 24 25 26 27 28 29 30 31 + ;; - - - - - - - - 32 33 34 35 36 37 38 39 + ;; - - - - - - - - 40 41 42 43 44 45 46 47 + ;; - - - - - - - - 48 49 50 51 52 53 54 55 + ;; - - - - - - - - 56 57 58 59 60 61 62 63 + ;; + ;; * * * * - - - - 36 37 38 39 4 5 6 7 + ;; * * * * - - - - 44 45 46 47 12 13 14 15 + ;; * * * * - - - - 52 53 54 55 20 21 22 23 + ;; * * * * - - - - 60 61 62 63 28 29 30 31 + ;; - - - - # # # # 32 33 34 35 0 1 2 3 + ;; - - - - # # # # 40 41 42 43 8 9 10 11 + ;; - - - - # # # # 48 49 50 51 16 17 18 19 + ;; - - - - # # # # 56 57 58 59 24 25 26 27 + ;; + ;; * * * * * * * * 48 49 50 51 16 17 18 19 + ;; * * * * * * * * 56 57 58 59 24 25 26 27 + ;; - - - - - - - - 52 53 54 55 20 21 22 23 + ;; - - - - - - - - 60 61 62 63 28 29 30 31 + ;; - - - - - - - - 32 33 34 35 0 1 2 3 + ;; - - - - - - - - 40 41 42 43 8 9 10 11 + ;; # # # # # # # # 36 37 38 39 4 5 6 7 + ;; # # # # # # # # 44 45 46 47 12 13 14 15 + ;; + ;; - - * * - - * * 48 49 32 33 16 17 0 1 + ;; - - * * - - * * 56 57 40 41 24 25 8 9 + ;; - - * * - - * * 52 53 36 37 20 21 4 5 + ;; - - * * - - * * 60 61 44 45 28 29 12 13 + ;; # # - - # # - - 50 51 34 35 18 19 2 3 + ;; # # - - # # - - 58 59 42 43 26 27 10 11 + ;; # # - - # # - - 54 55 38 39 22 23 6 7 + ;; # # - - # # - - 62 63 46 47 30 31 14 15 + ;; + ;; - - - - - - - - 48 49 32 33 16 17 0 1 + ;; * * * * * * * * 50 51 34 35 18 19 2 3 + ;; - - - - - - - - 52 53 36 37 20 21 4 5 + ;; * * * * * * * * 54 55 38 39 22 23 6 7 + ;; # # # # # # # # 56 57 40 41 24 25 8 9 + ;; - - - - - - - - 58 59 42 43 26 27 10 11 + ;; # # # # # # # # 60 61 44 45 28 29 12 13 + ;; - - - - - - - - 62 63 46 47 30 31 14 15 + ;; + ;; * - * - * - * - 57 49 41 33 25 17 9 1 + ;; * - * - * - * - 59 51 43 35 27 19 11 3 + ;; * - * - * - * - 61 53 45 37 29 21 13 5 + ;; * - * - * - * - 63 55 47 39 31 23 15 7 + ;; - # - # - # - # 56 48 40 32 24 16 8 0 + ;; - # - # - # - # 58 50 42 34 26 18 10 2 + ;; - # - # - # - # 60 52 44 36 28 20 12 4 + ;; - # - # - # - # 62 54 46 38 30 22 14 6 (new-network (make-permutation-network 64 ; 5 4 3 2 1 0 -- 2.11.0