2015-12-04 12:35:53

by Jason Cooper

[permalink] [raw]
Subject: Re: [PATCH] staging: skein: macros moved to header file

Oh hell. :)

Go ahead and try to configure git send-mail, or configure Thunderbird
according to Documentation/email-clients.txt. If you want, send it to
me off list first to confirm it's not getting mangled like below.

I think you just won the obfuscated C contest...

thx,

Jason.

On Fri, Dec 04, 2015 at 07:09:49AM +0000, Sanidhya Solanki wrote:
> Staging: Skein: Moved macros from skein_block.c to header file.
> The original code defined macros in the source code, making it harder toread.
> Move them to the header file.
> Signed-off-by: Sanidhya Solanki
> <[email protected]>--- drivers/staging/skein/skein_block.c | 321
> ----------------------------------- drivers/staging/skein/skein_block.h | 323
> ++++++++++++++++++++++++++++++++++++ 2 files changed, 323 insertions(+), 321
> deletions(-)
> diff --git a/drivers/staging/skein/skein_block.c
> b/drivers/staging/skein/skein_block.cindex 45b4732..9701f95 100644---
> a/drivers/staging/skein/skein_block.c+++
> b/drivers/staging/skein/skein_block.c@@ -18,327 +18,6 @@ #include
> "skein_base.h" #include "skein_block.h" -#ifndef SKEIN_USE_ASM-#define
> SKEIN_USE_ASM   (0) /* default is all C code (no ASM) */-#endif--#ifndef
> SKEIN_LOOP-#define SKEIN_LOOP 001 /* default: unroll 256 and 512, but not
> 1024 */-#endif--#define BLK_BITS        (WCNT * 64) /* some useful
> definitions for code here */-#define KW_TWK_BASE     (0)-#define KW_KEY_BASE
>     (3)-#define ks              (kw + KW_KEY_BASE)-#define ts            
>  (kw + KW_TWK_BASE)--#ifdef SKEIN_DEBUG-#define debug_save_tweak(ctx)      
> \-{                                   \- ctx->h.tweak[0] = ts[0];  
>  \- ctx->h.tweak[1] = ts[1];    \-}-#else-#define
> debug_save_tweak(ctx)-#endif--#if !(SKEIN_USE_ASM & 256)-#undef  RCNT-#define
> RCNT (SKEIN_256_ROUNDS_TOTAL / 8)-#ifdef SKEIN_LOOP /* configure how much to
> unroll the loop */-#define SKEIN_UNROLL_256 (((SKEIN_LOOP) / 100) %
> 10)-#else-#define SKEIN_UNROLL_256 (0)-#endif--#if SKEIN_UNROLL_256-#if (RCNT
> % SKEIN_UNROLL_256)-#error "Invalid SKEIN_UNROLL_256" /* sanity check on
> unroll count */-#endif-#endif-#define ROUND256(p0, p1, p2, p3, ROT, r_num)  
>       \- do {                                         \- X##p0 += X##p1;    
>                  \- X##p1 = rotl_64(X##p1, ROT##_0);     \- X##p1 ^= X##p0;
>                      \- X##p2 += X##p3;                      \- X##p3 =
> rotl_64(X##p3, ROT##_1);     \- X##p3 ^= X##p2;                      \- }
> while (0)--#if SKEIN_UNROLL_256 == 0-#define R256(p0, p1, p2, p3, ROT, r_num)
> /* fully unrolled */ \- ROUND256(p0, p1, p2, p3, ROT, r_num)--#define I256(R)
>                                                         \- do {              
>                                              \- /* inject the key schedule
> value */                     \- X0   += ks[((R) + 1) % 5];                  
>            \- X1   += ks[((R) + 2) % 5] + ts[((R) + 1) % 3];          \- X2
>   += ks[((R) + 3) % 5] + ts[((R) + 2) % 3];          \- X3   += ks[((R) + 4)
> % 5] + (R) + 1;                    \- } while (0)-#else-/* looping version
> */-#define R256(p0, p1, p2, p3, ROT, r_num) ROUND256(p0, p1, p2, p3, ROT,
> r_num)--#define I256(R)                                         \- do {      
>                                      \- /* inject the key schedule value */
>     \- X0 += ks[r + (R) + 0];                  \- X1 += ks[r + (R) + 1] +
> ts[r + (R) + 0];\- X2 += ks[r + (R) + 2] + ts[r + (R) + 1];\- X3 += ks[r +
> (R) + 3] + r + (R);        \- /* rotate key schedule */              
> \- ks[r + (R) + 4] = ks[r + (R) - 1];      \- ts[r + (R) + 2] = ts[r + (R)
> - 1];      \- } while (0)-#endif-#define R256_8_ROUNDS(R)                    
>            \- do {                                            \- R256(0, 1,
> 2, 3, R_256_0, 8 * (R) + 1); \- R256(0, 3, 2, 1, R_256_1, 8 * (R) + 2);
> \- R256(0, 1, 2, 3, R_256_2, 8 * (R) + 3); \- R256(0, 3, 2, 1, R_256_3, 8 *
> (R) + 4); \- I256(2 * (R));                          \- R256(0, 1, 2, 3,
> R_256_4, 8 * (R) + 5); \- R256(0, 3, 2, 1, R_256_5, 8 * (R) + 6);
> \- R256(0, 1, 2, 3, R_256_6, 8 * (R) + 7); \- R256(0, 3, 2, 1, R_256_7, 8 *
> (R) + 8); \- I256(2 * (R) + 1);                      \- } while (0)--#define
> R256_UNROLL_R(NN)                     \- ((SKEIN_UNROLL_256 == 0 &&          
>  \- SKEIN_256_ROUNDS_TOTAL / 8 > (NN)) || \- (SKEIN_UNROLL_256 > (NN)))--#if
>  (SKEIN_UNROLL_256 > 14)-#error  "need more unrolling in
> skein_256_process_block"-#endif-#endif--#if !(SKEIN_USE_ASM & 512)-#undef
>  RCNT-#define RCNT  (SKEIN_512_ROUNDS_TOTAL/8)--#ifdef SKEIN_LOOP /*
> configure how much to unroll the loop */-#define SKEIN_UNROLL_512
> (((SKEIN_LOOP)/10)%10)-#else-#define SKEIN_UNROLL_512 (0)-#endif--#if
> SKEIN_UNROLL_512-#if (RCNT % SKEIN_UNROLL_512)-#error "Invalid
> SKEIN_UNROLL_512" /* sanity check on unroll count */-#endif-#endif-#define
> ROUND512(p0, p1, p2, p3, p4, p5, p6, p7, ROT, r_num)    \- do {              
>                                      \- X##p0 += X##p1;                    
>             \- X##p1 = rotl_64(X##p1, ROT##_0);                \- X##p1 ^=
> X##p0;                                 \- X##p2 += X##p3;                  
>               \- X##p3 = rotl_64(X##p3, ROT##_1);                \- X##p3
> ^= X##p2;                                 \- X##p4 += X##p5;                
>                 \- X##p5 = rotl_64(X##p5, ROT##_2);                \- X##p5
> ^= X##p4;                                 \- X##p6 += X##p7; X##p7 =
> rotl_64(X##p7, ROT##_3);\- X##p7 ^= X##p6;                                
> \- } while (0)--#if SKEIN_UNROLL_512 == 0-#define R512(p0, p1, p2, p3, p4,
> p5, p6, p7, ROT, r_num) /* unrolled */ \- ROUND512(p0, p1, p2, p3, p4, p5,
> p6, p7, ROT, r_num)--#define I512(R)                                        
>                 \- do {                                                      
>      \- /* inject the key schedule value */                     \- X0   +=
> ks[((R) + 1) % 9];                              \- X1   += ks[((R) + 2) %
> 9];                              \- X2   += ks[((R) + 3) % 9];              
>                \- X3   += ks[((R) + 4) % 9];                            
>  \- X4   += ks[((R) + 5) % 9];                              \- X5   +=
> ks[((R) + 6) % 9] + ts[((R) + 1) % 3];          \- X6   += ks[((R) + 7) % 9]
> + ts[((R) + 2) % 3];          \- X7   += ks[((R) + 8) % 9] + (R) + 1;      
>              \- } while (0)--#else /* looping version */-#define R512(p0, p1,
> p2, p3, p4, p5, p6, p7, ROT, r_num)                 \- ROUND512(p0, p1, p2,
> p3, p4, p5, p6, p7, ROT, r_num)             \--#define I512(R)              
>                                           \- do {                            
>                                \- /* inject the key schedule value */      
>               \- X0   += ks[r + (R) + 0];                              
>  \- X1   += ks[r + (R) + 1];                                \- X2   += ks[r
> + (R) + 2];                                \- X3   += ks[r + (R) + 3];      
>                          \- X4   += ks[r + (R) + 4];                        
>        \- X5   += ks[r + (R) + 5] + ts[r + (R) + 0];              \- X6  
> += ks[r + (R) + 6] + ts[r + (R) + 1];              \- X7   += ks[r + (R) +
> 7] + r + (R);                      \- /* rotate key schedule */            
>                   \- ks[r + (R) + 8] = ks[r + (R) - 1];                    
>  \- ts[r + (R) + 2] = ts[r + (R) - 1];                      \- } while
> (0)-#endif /* end of looped code definitions */-#define R512_8_ROUNDS(R)  /*
> do 8 full rounds */                        \- do {                          
>                                  \- R512(0, 1, 2, 3, 4, 5, 6, 7, R_512_0, 8
> * (R) + 1);     \- R512(2, 1, 4, 7, 6, 5, 0, 3, R_512_1, 8 * (R) + 2);    
> \- R512(4, 1, 6, 3, 0, 5, 2, 7, R_512_2, 8 * (R) + 3);     \- R512(6, 1, 0,
> 7, 2, 5, 4, 3, R_512_3, 8 * (R) + 4);     \- I512(2 * (R));                
>                          \- R512(0, 1, 2, 3, 4, 5, 6, 7, R_512_4, 8 * (R) +
> 5);     \- R512(2, 1, 4, 7, 6, 5, 0, 3, R_512_5, 8 * (R) + 6);    
> \- R512(4, 1, 6, 3, 0, 5, 2, 7, R_512_6, 8 * (R) + 7);     \- R512(6, 1, 0,
> 7, 2, 5, 4, 3, R_512_7, 8 * (R) + 8);     \- I512(2 * (R) + 1); /* and key
> injection */              \- } while (0)-#define R512_UNROLL_R(NN)          
>                   \- ((SKEIN_UNROLL_512 == 0 &&          
>  \- SKEIN_512_ROUNDS_TOTAL/8 > (NN)) ||   \- (SKEIN_UNROLL_512 >
> (NN)))--#if  (SKEIN_UNROLL_512 > 14)-#error  "need more unrolling in
> skein_512_process_block"-#endif-#endif--#if !(SKEIN_USE_ASM & 1024)-#undef
>  RCNT-#define RCNT  (SKEIN_1024_ROUNDS_TOTAL/8)-#ifdef SKEIN_LOOP /*
> configure how much to unroll the loop */-#define SKEIN_UNROLL_1024
> ((SKEIN_LOOP) % 10)-#else-#define SKEIN_UNROLL_1024 (0)-#endif--#if
> (SKEIN_UNROLL_1024 != 0)-#if (RCNT % SKEIN_UNROLL_1024)-#error "Invalid
> SKEIN_UNROLL_1024" /* sanity check on unroll count */-#endif-#endif-#define
> ROUND1024(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, pA, pB, pC, pD, pE, \-
>  pF, ROT, r_num)                                             \- do {        
>                                                          \- X##p0 += X##p1;
>                                               \- X##p1 = rotl_64(X##p1,
> ROT##_0);                              \- X##p1 ^= X##p0;                  
>                             \- X##p2 += X##p3;                              
>                 \- X##p3 = rotl_64(X##p3, ROT##_1);                        
>      \- X##p3 ^= X##p2;                                              
> \- X##p4 += X##p5;                                               \- X##p5 =
> rotl_64(X##p5, ROT##_2);                              \- X##p5 ^= X##p4;    
>                                           \- X##p6 += X##p7;                
>                               \- X##p7 = rotl_64(X##p7, ROT##_3);          
>                    \- X##p7 ^= X##p6;                                      
>         \- X##p8 += X##p9;                                              
> \- X##p9 = rotl_64(X##p9, ROT##_4);                              \- X##p9
> ^= X##p8;                                               \- X##pA += X##pB;  
>                                             \- X##pB = rotl_64(X##pB,
> ROT##_5);                              \- X##pB ^= X##pA;                  
>                             \- X##pC += X##pD;                              
>                 \- X##pD = rotl_64(X##pD, ROT##_6);                        
>      \- X##pD ^= X##pC;                                              
> \- X##pE += X##pF;                                               \- X##pF =
> rotl_64(X##pF, ROT##_7);                              \- X##pF ^= X##pE;    
>                                           \- } while (0)--#if
> SKEIN_UNROLL_1024 == 0-#define R1024(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9,
> pA, pB, pC, pD, pE, pF, \-      ROT, rn)                                    
>                    \- ROUND1024(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, pA,
> pB, pC, pD, pE, \-  pF, ROT, rn)                                          
>      \--#define I1024(R)                                                \- do
> {                                                    \- /* inject the key
> schedule value */             \- X00 += ks[((R) + 1) % 17];                
>      \- X01 += ks[((R) + 2) % 17];                      \- X02 += ks[((R) +
> 3) % 17];                      \- X03 += ks[((R) + 4) % 17];                
>      \- X04 += ks[((R) + 5) % 17];                      \- X05 += ks[((R) +
> 6) % 17];                      \- X06 += ks[((R) + 7) % 17];                
>      \- X07 += ks[((R) + 8) % 17];                      \- X08 += ks[((R) +
> 9) % 17];                      \- X09 += ks[((R) + 10) % 17];              
>       \- X10 += ks[((R) + 11) % 17];                     \- X11 += ks[((R)
> + 12) % 17];                     \- X12 += ks[((R) + 13) % 17];            
>         \- X13 += ks[((R) + 14) % 17] + ts[((R) + 1) % 3]; \- X14 +=
> ks[((R) + 15) % 17] + ts[((R) + 2) % 3]; \- X15 += ks[((R) + 16) % 17] + (R)
> + 1;           \- } while (0)-#else /* looping version */-#define R1024(p0,
> p1, p2, p3, p4, p5, p6, p7, p8, p9, pA, pB, pC, pD, pE, pF, \-      ROT, rn)
>                                                        \- ROUND1024(p0, p1,
> p2, p3, p4, p5, p6, p7, p8, p9, pA, pB, pC, pD, pE, \-  pF, ROT, rn)      
>                                          \--#define I1024(R)                
>                                        \- do {                              
>                              \- /* inject the key schedule value */        
>             \- X00 += ks[r + (R) + 0];                                
> \- X01 += ks[r + (R) + 1];                                 \- X02 += ks[r +
> (R) + 2];                                 \- X03 += ks[r + (R) + 3];        
>                         \- X04 += ks[r + (R) + 4];                          
>       \- X05 += ks[r + (R) + 5];                                 \- X06 +=
> ks[r + (R) + 6];                                 \- X07 += ks[r + (R) + 7];
>                                 \- X08 += ks[r + (R) + 8];                  
>               \- X09 += ks[r + (R) + 9];                                
> \- X10 += ks[r + (R) + 10];                                \- X11 += ks[r +
> (R) + 11];                                \- X12 += ks[r + (R) + 12];      
>                          \- X13 += ks[r + (R) + 13] + ts[r + (R) + 0];      
>        \- X14 += ks[r + (R) + 14] + ts[r + (R) + 1];              \- X15 +=
> ks[r + (R) + 15] + r + (R);                      \- /* rotate key schedule
> */                               \- ks[r + (R) + 16] = ks[r + (R) - 1];    
>                 \- ts[r + (R) + 2] = ts[r + (R) - 1];                    
>  \- } while (0)--#endif-#define R1024_8_ROUNDS(R)                            
>                     \- do {                                                  
>            \- R1024(00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, \-
>      13, 14, 15, R1024_0, 8*(R) + 1);                    \- R1024(00, 09,
> 02, 13, 06, 11, 04, 15, 10, 07, 12, 03, 14, \-      05, 08, 01, R1024_1,
> 8*(R) + 2);                    \- R1024(00, 07, 02, 05, 04, 03, 06, 01, 12,
> 15, 14, 13, 08, \-      11, 10, 09, R1024_2, 8*(R) + 3);                  
>  \- R1024(00, 15, 02, 11, 06, 13, 04, 09, 14, 01, 08, 05, 10, \-      03,
> 12, 07, R1024_3, 8*(R) + 4);                    \- I1024(2*(R));            
>                                 \- R1024(00, 01, 02, 03, 04, 05, 06, 07, 08,
> 09, 10, 11, 12, \-      13, 14, 15, R1024_4, 8*(R) + 5);                  
>  \- R1024(00, 09, 02, 13, 06, 11, 04, 15, 10, 07, 12, 03, 14, \-      05,
> 08, 01, R1024_5, 8*(R) + 6);                    \- R1024(00, 07, 02, 05, 04,
> 03, 06, 01, 12, 15, 14, 13, 08, \-      11, 10, 09, R1024_6, 8*(R) + 7);  
>                  \- R1024(00, 15, 02, 11, 06, 13, 04, 09, 14, 01, 08, 05,
> 10, \-      03, 12, 07, R1024_7, 8*(R) + 8);                  
>  \- I1024(2*(R)+1);                                           \- } while
> (0)--#define R1024_UNROLL_R(NN)                            
>  \- ((SKEIN_UNROLL_1024 == 0 &&             \- SKEIN_1024_ROUNDS_TOTAL/8 >
> (NN)) ||    \- (SKEIN_UNROLL_1024 > (NN)))--#if  (SKEIN_UNROLL_1024 >
> 14)-#error  "need more unrolling in
> Skein_1024_Process_Block"-#endif-#endif  /*****************************
>  SKEIN_256 ******************************/ #if !(SKEIN_USE_ASM & 256)diff
> --git a/drivers/staging/skein/skein_block.h
> b/drivers/staging/skein/skein_block.hindex 9d40f4a..1b28d52 100644---
> a/drivers/staging/skein/skein_block.h+++
> b/drivers/staging/skein/skein_block.h@@ -20,3 +20,326 @@ void
> skein_1024_process_block(struct skein_1024_ctx *ctx, const u8 *blk_ptr,   
>    size_t blk_cnt, size_t byte_cnt_add);  #endif+++#ifndef
> SKEIN_USE_ASM+#define SKEIN_USE_ASM   (0) /* default is all C code (no ASM)
> */+#endif++#ifndef SKEIN_LOOP+#define SKEIN_LOOP 001 /* default: unroll 256
> and 512, but not 1024 */+#endif++#define BLK_BITS        (WCNT * 64) /* some
> useful definitions for code here */+#define KW_TWK_BASE     (0)+#define
> KW_KEY_BASE     (3)+#define ks              (kw + KW_KEY_BASE)+#define ts    
>          (kw + KW_TWK_BASE)++#ifdef SKEIN_DEBUG+#define debug_save_tweak(ctx)
>       \+{                                   \+ ctx->h.tweak[0] = ts[0];  
>  \+ ctx->h.tweak[1] = ts[1];    \+}+#else+#define
> debug_save_tweak(ctx)+#endif++#if !(SKEIN_USE_ASM & 256)+#undef  RCNT+#define
> RCNT (SKEIN_256_ROUNDS_TOTAL / 8)+#ifdef SKEIN_LOOP /* configure how much to
> unroll the loop */+#define SKEIN_UNROLL_256 (((SKEIN_LOOP) / 100) %
> 10)+#else+#define SKEIN_UNROLL_256 (0)+#endif++#if SKEIN_UNROLL_256+#if (RCNT
> % SKEIN_UNROLL_256)+#error "Invalid SKEIN_UNROLL_256" /* sanity check on
> unroll count */+#endif+#endif+#define ROUND256(p0, p1, p2, p3, ROT, r_num)  
>       \+ do {                                         \+ X##p0 += X##p1;    
>                  \+ X##p1 = rotl_64(X##p1, ROT##_0);     \+ X##p1 ^= X##p0;
>                      \+ X##p2 += X##p3;                      \+ X##p3 =
> rotl_64(X##p3, ROT##_1);     \+ X##p3 ^= X##p2;                      \+ }
> while (0)++#if SKEIN_UNROLL_256 == 0+#define R256(p0, p1, p2, p3, ROT, r_num)
> /* fully unrolled */ \+ ROUND256(p0, p1, p2, p3, ROT, r_num)++#define I256(R)
>                                                         \+ do {              
>                                              \+ /* inject the key schedule
> value */                     \+ X0   += ks[((R) + 1) % 5];                  
>            \+ X1   += ks[((R) + 2) % 5] + ts[((R) + 1) % 3];          \+ X2
>   += ks[((R) + 3) % 5] + ts[((R) + 2) % 3];          \+ X3   += ks[((R) + 4)
> % 5] + (R) + 1;                    \+ } while (0)+#else+/* looping version
> */+#define R256(p0, p1, p2, p3, ROT, r_num) ROUND256(p0, p1, p2, p3, ROT,
> r_num)++#define I256(R)                                         \+ do {      
>                                      \+ /* inject the key schedule value */
>     \+ X0 += ks[r + (R) + 0];                  \+ X1 += ks[r + (R) + 1] +
> ts[r + (R) + 0];\+ X2 += ks[r + (R) + 2] + ts[r + (R) + 1];\+ X3 += ks[r +
> (R) + 3] + r + (R);        \+ /* rotate key schedule */              
> \+ ks[r + (R) + 4] = ks[r + (R) - 1];      \+ ts[r + (R) + 2] = ts[r + (R)
> - 1];      \+ } while (0)+#endif+#define R256_8_ROUNDS(R)                    
>            \+ do {                                            \+ R256(0, 1,
> 2, 3, R_256_0, 8 * (R) + 1); \+ R256(0, 3, 2, 1, R_256_1, 8 * (R) + 2);
> \+ R256(0, 1, 2, 3, R_256_2, 8 * (R) + 3); \+ R256(0, 3, 2, 1, R_256_3, 8 *
> (R) + 4); \+ I256(2 * (R));                          \+ R256(0, 1, 2, 3,
> R_256_4, 8 * (R) + 5); \+ R256(0, 3, 2, 1, R_256_5, 8 * (R) + 6);
> \+ R256(0, 1, 2, 3, R_256_6, 8 * (R) + 7); \+ R256(0, 3, 2, 1, R_256_7, 8 *
> (R) + 8); \+ I256(2 * (R) + 1);                      \+ } while (0)++#define
> R256_UNROLL_R(NN)                     \+ ((SKEIN_UNROLL_256 == 0 &&          
>  \+ SKEIN_256_ROUNDS_TOTAL / 8 > (NN)) || \+ (SKEIN_UNROLL_256 > (NN)))++#if
>  (SKEIN_UNROLL_256 > 14)+#error  "need more unrolling in
> skein_256_process_block"+#endif+#endif++#if !(SKEIN_USE_ASM & 512)+#undef
>  RCNT+#define RCNT  (SKEIN_512_ROUNDS_TOTAL/8)++#ifdef SKEIN_LOOP /*
> configure how much to unroll the loop */+#define SKEIN_UNROLL_512
> (((SKEIN_LOOP)/10)%10)+#else+#define SKEIN_UNROLL_512 (0)+#endif++#if
> SKEIN_UNROLL_512+#if (RCNT % SKEIN_UNROLL_512)+#error "Invalid
> SKEIN_UNROLL_512" /* sanity check on unroll count */+#endif+#endif+#define
> ROUND512(p0, p1, p2, p3, p4, p5, p6, p7, ROT, r_num)    \+ do {              
>                                      \+ X##p0 += X##p1;                    
>             \+ X##p1 = rotl_64(X##p1, ROT##_0);                \+ X##p1 ^=
> X##p0;                                 \+ X##p2 += X##p3;                  
>               \+ X##p3 = rotl_64(X##p3, ROT##_1);                \+ X##p3
> ^= X##p2;                                 \+ X##p4 += X##p5;                
>                 \+ X##p5 = rotl_64(X##p5, ROT##_2);                \+ X##p5
> ^= X##p4;                                 \+ X##p6 += X##p7; X##p7 =
> rotl_64(X##p7, ROT##_3);\+ X##p7 ^= X##p6;                                
> \+ } while (0)++#if SKEIN_UNROLL_512 == 0+#define R512(p0, p1, p2, p3, p4,
> p5, p6, p7, ROT, r_num) /* unrolled */ \+ ROUND512(p0, p1, p2, p3, p4, p5,
> p6, p7, ROT, r_num)++#define I512(R)                                        
>                 \+ do {                                                      
>      \+ /* inject the key schedule value */                     \+ X0   +=
> ks[((R) + 1) % 9];                              \+ X1   += ks[((R) + 2) %
> 9];                              \+ X2   += ks[((R) + 3) % 9];              
>                \+ X3   += ks[((R) + 4) % 9];                            
>  \+ X4   += ks[((R) + 5) % 9];                              \+ X5   +=
> ks[((R) + 6) % 9] + ts[((R) + 1) % 3];          \+ X6   += ks[((R) + 7) % 9]
> + ts[((R) + 2) % 3];          \+ X7   += ks[((R) + 8) % 9] + (R) + 1;      
>              \+ } while (0)++#else /* looping version */+#define R512(p0, p1,
> p2, p3, p4, p5, p6, p7, ROT, r_num)                 \+ ROUND512(p0, p1, p2,
> p3, p4, p5, p6, p7, ROT, r_num)             \++#define I512(R)              
>                                           \+ do {                            
>                                \+ /* inject the key schedule value */      
>               \+ X0   += ks[r + (R) + 0];                              
>  \+ X1   += ks[r + (R) + 1];                                \+ X2   += ks[r
> + (R) + 2];                                \+ X3   += ks[r + (R) + 3];      
>                          \+ X4   += ks[r + (R) + 4];                        
>        \+ X5   += ks[r + (R) + 5] + ts[r + (R) + 0];              \+ X6  
> += ks[r + (R) + 6] + ts[r + (R) + 1];              \+ X7   += ks[r + (R) +
> 7] + r + (R);                      \+ /* rotate key schedule */            
>                   \+ ks[r + (R) + 8] = ks[r + (R) - 1];                    
>  \+ ts[r + (R) + 2] = ts[r + (R) - 1];                      \+ } while
> (0)+#endif /* end of looped code definitions */+#define R512_8_ROUNDS(R)  /*
> do 8 full rounds */                        \+ do {                          
>                                  \+ R512(0, 1, 2, 3, 4, 5, 6, 7, R_512_0, 8
> * (R) + 1);     \+ R512(2, 1, 4, 7, 6, 5, 0, 3, R_512_1, 8 * (R) + 2);    
> \+ R512(4, 1, 6, 3, 0, 5, 2, 7, R_512_2, 8 * (R) + 3);     \+ R512(6, 1, 0,
> 7, 2, 5, 4, 3, R_512_3, 8 * (R) + 4);     \+ I512(2 * (R));                
>                          \+ R512(0, 1, 2, 3, 4, 5, 6, 7, R_512_4, 8 * (R) +
> 5);     \+ R512(2, 1, 4, 7, 6, 5, 0, 3, R_512_5, 8 * (R) + 6);    
> \+ R512(4, 1, 6, 3, 0, 5, 2, 7, R_512_6, 8 * (R) + 7);     \+ R512(6, 1, 0,
> 7, 2, 5, 4, 3, R_512_7, 8 * (R) + 8);     \+ I512(2 * (R) + 1); /* and key
> injection */              \+ } while (0)+#define R512_UNROLL_R(NN)          
>                   \+ ((SKEIN_UNROLL_512 == 0 &&          
>  \+ SKEIN_512_ROUNDS_TOTAL/8 > (NN)) ||   \+ (SKEIN_UNROLL_512 >
> (NN)))++#if  (SKEIN_UNROLL_512 > 14)+#error  "need more unrolling in
> skein_512_process_block"+#endif+#endif++#if !(SKEIN_USE_ASM & 1024)+#undef
>  RCNT+#define RCNT  (SKEIN_1024_ROUNDS_TOTAL/8)+#ifdef SKEIN_LOOP /*
> configure how much to unroll the loop */+#define SKEIN_UNROLL_1024
> ((SKEIN_LOOP) % 10)+#else+#define SKEIN_UNROLL_1024 (0)+#endif++#if
> (SKEIN_UNROLL_1024 != 0)+#if (RCNT % SKEIN_UNROLL_1024)+#error "Invalid
> SKEIN_UNROLL_1024" /* sanity check on unroll count */+#endif+#endif+#define
> ROUND1024(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, pA, pB, pC, pD, pE, \+
>  pF, ROT, r_num)                                             \+ do {        
>                                                          \+ X##p0 += X##p1;
>                                               \+ X##p1 = rotl_64(X##p1,
> ROT##_0);                              \+ X##p1 ^= X##p0;                  
>                             \+ X##p2 += X##p3;                              
>                 \+ X##p3 = rotl_64(X##p3, ROT##_1);                        
>      \+ X##p3 ^= X##p2;                                              
> \+ X##p4 += X##p5;                                               \+ X##p5 =
> rotl_64(X##p5, ROT##_2);                              \+ X##p5 ^= X##p4;    
>                                           \+ X##p6 += X##p7;                
>                               \+ X##p7 = rotl_64(X##p7, ROT##_3);          
>                    \+ X##p7 ^= X##p6;                                      
>         \+ X##p8 += X##p9;                                              
> \+ X##p9 = rotl_64(X##p9, ROT##_4);                              \+ X##p9
> ^= X##p8;                                               \+ X##pA += X##pB;  
>                                             \+ X##pB = rotl_64(X##pB,
> ROT##_5);                              \+ X##pB ^= X##pA;                  
>                             \+ X##pC += X##pD;                              
>                 \+ X##pD = rotl_64(X##pD, ROT##_6);                        
>      \+ X##pD ^= X##pC;                                              
> \+ X##pE += X##pF;                                               \+ X##pF =
> rotl_64(X##pF, ROT##_7);                              \+ X##pF ^= X##pE;    
>                                           \+ } while (0)++#if
> SKEIN_UNROLL_1024 == 0+#define R1024(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9,
> pA, pB, pC, pD, pE, pF, \+      ROT, rn)                                    
>                    \+ ROUND1024(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, pA,
> pB, pC, pD, pE, \+  pF, ROT, rn)                                          
>      \++#define I1024(R)                                                \+ do
> {                                                    \+ /* inject the key
> schedule value */             \+ X00 += ks[((R) + 1) % 17];                
>      \+ X01 += ks[((R) + 2) % 17];                      \+ X02 += ks[((R) +
> 3) % 17];                      \+ X03 += ks[((R) + 4) % 17];                
>      \+ X04 += ks[((R) + 5) % 17];                      \+ X05 += ks[((R) +
> 6) % 17];                      \+ X06 += ks[((R) + 7) % 17];                
>      \+ X07 += ks[((R) + 8) % 17];                      \+ X08 += ks[((R) +
> 9) % 17];                      \+ X09 += ks[((R) + 10) % 17];              
>       \+ X10 += ks[((R) + 11) % 17];                     \+ X11 += ks[((R)
> + 12) % 17];                     \+ X12 += ks[((R) + 13) % 17];            
>         \+ X13 += ks[((R) + 14) % 17] + ts[((R) + 1) % 3]; \+ X14 +=
> ks[((R) + 15) % 17] + ts[((R) + 2) % 3]; \+ X15 += ks[((R) + 16) % 17] + (R)
> + 1;           \+ } while (0)+#else /* looping version */+#define R1024(p0,
> p1, p2, p3, p4, p5, p6, p7, p8, p9, pA, pB, pC, pD, pE, pF, \+      ROT, rn)
>                                                        \+ ROUND1024(p0, p1,
> p2, p3, p4, p5, p6, p7, p8, p9, pA, pB, pC, pD, pE, \+  pF, ROT, rn)      
>                                          \++#define I1024(R)                
>                                        \+ do {                              
>                              \+ /* inject the key schedule value */        
>             \+ X00 += ks[r + (R) + 0];                                
> \+ X01 += ks[r + (R) + 1];                                 \+ X02 += ks[r +
> (R) + 2];                                 \+ X03 += ks[r + (R) + 3];        
>                         \+ X04 += ks[r + (R) + 4];                          
>       \+ X05 += ks[r + (R) + 5];                                 \+ X06 +=
> ks[r + (R) + 6];                                 \+ X07 += ks[r + (R) + 7];
>                                 \+ X08 += ks[r + (R) + 8];                  
>               \+ X09 += ks[r + (R) + 9];                                
> \+ X10 += ks[r + (R) + 10];                                \+ X11 += ks[r +
> (R) + 11];                                \+ X12 += ks[r + (R) + 12];      
>                          \+ X13 += ks[r + (R) + 13] + ts[r + (R) + 0];      
>        \+ X14 += ks[r + (R) + 14] + ts[r + (R) + 1];              \+ X15 +=
> ks[r + (R) + 15] + r + (R);                      \+ /* rotate key schedule
> */                               \+ ks[r + (R) + 16] = ks[r + (R) - 1];    
>                 \+ ts[r + (R) + 2] = ts[r + (R) - 1];                    
>  \+ } while (0)++#endif+#define R1024_8_ROUNDS(R)                            
>                     \+ do {                                                  
>            \+ R1024(00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, \+
>      13, 14, 15, R1024_0, 8*(R) + 1);                    \+ R1024(00, 09,
> 02, 13, 06, 11, 04, 15, 10, 07, 12, 03, 14, \+      05, 08, 01, R1024_1,
> 8*(R) + 2);                    \+ R1024(00, 07, 02, 05, 04, 03, 06, 01, 12,
> 15, 14, 13, 08, \+      11, 10, 09, R1024_2, 8*(R) + 3);                  
>  \+ R1024(00, 15, 02, 11, 06, 13, 04, 09, 14, 01, 08, 05, 10, \+      03,
> 12, 07, R1024_3, 8*(R) + 4);                    \+ I1024(2*(R));            
>                                 \+ R1024(00, 01, 02, 03, 04, 05, 06, 07, 08,
> 09, 10, 11, 12, \+      13, 14, 15, R1024_4, 8*(R) + 5);                  
>  \+ R1024(00, 09, 02, 13, 06, 11, 04, 15, 10, 07, 12, 03, 14, \+      05,
> 08, 01, R1024_5, 8*(R) + 6);                    \+ R1024(00, 07, 02, 05, 04,
> 03, 06, 01, 12, 15, 14, 13, 08, \+      11, 10, 09, R1024_6, 8*(R) + 7);  
>                  \+ R1024(00, 15, 02, 11, 06, 13, 04, 09, 14, 01, 08, 05,
> 10, \+      03, 12, 07, R1024_7, 8*(R) + 8);                  
>  \+ I1024(2*(R)+1);                                           \+ } while
> (0)++#define R1024_UNROLL_R(NN)                            
>  \+ ((SKEIN_UNROLL_1024 == 0 &&             \+ SKEIN_1024_ROUNDS_TOTAL/8 >
> (NN)) ||    \+ (SKEIN_UNROLL_1024 > (NN)))++#if  (SKEIN_UNROLL_1024 >
> 14)+#error  "need more unrolling in
> Skein_1024_Process_Block"+#endif+#endif-- 2.5.0