utils/permute.lisp: Add supporting diagrams for IP permutations.
authorMark Wooding <mdw@distorted.org.uk>
Fri, 2 Feb 2024 11:25:31 +0000 (11:25 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Fri, 2 Feb 2024 11:25:31 +0000 (11:25 +0000)
I decided I didn't want to lose these, and putting them in the main code
seemed too cluttery.

utils/permute.lisp

index 7c8bcba..7d7cb56 100644 (file)
        (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
           (: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