1  typedef unsigned int u32;
       2  typedef unsigned long long u64;
       3  
       4  static inline u64 rot(u64 x, u32 n, u32 mb, u32 me)
       5  {
       6  	u64 y = x;
       7  
       8  	if (n)
       9  		x = 0
      10  #ifdef SL
      11  		| (x << n)
      12  #endif
      13  #ifdef SR
      14  		| (x >> (64 - n))
      15  #endif
      16  		;
      17  
      18  	u64 s = -1;
      19  	if (n)
      20  		s = 0
      21  #ifdef SL
      22  		| (s << n)
      23  #endif
      24  #ifdef SR
      25  		| (s >> (64 - n))
      26  #endif
      27  		;
      28  
      29  	u64 mask = 0;
      30  	mask += 1ULL << (63 - mb);
      31  	mask += 1ULL << (63 - mb);
      32  	mask -= 1ULL << (63 - me);
      33  	mask -= (mb > me);
      34  
      35  	if (mask & ~s)
      36  		return 12345*y;
      37  
      38  	return x & mask;
      39  }
      40  
      41  #ifdef CC
      42  #define X2(N,B) \
      43  u64 f_##N##_##B(u64 x) { return rot(x,N,B,63-N); }
      44  #endif
      45  #ifdef CL
      46  #define X2(N,B) \
      47  u64 f_##N##_##B(u64 x) { return rot(x,N,B,63); }
      48  #endif
      49  #ifdef CR
      50  #define X2(N,E) \
      51  u64 f_##N##_##E(u64 x) { return rot(x,N,0,E); }
      52  #endif
      53  
      54  #define X1(N) \
      55  X2(N,0) \
      56  X2(N,1) \
      57  X2(N,2) \
      58  X2(N,7) \
      59  X2(N,8) \
      60  X2(N,9) \
      61  X2(N,15) \
      62  X2(N,16) \
      63  X2(N,17) \
      64  X2(N,23) \
      65  X2(N,24) \
      66  X2(N,25) \
      67  X2(N,29) \
      68  X2(N,30) \
      69  X2(N,31) \
      70  X2(N,32) \
      71  X2(N,33) \
      72  X2(N,34) \
      73  X2(N,39) \
      74  X2(N,40) \
      75  X2(N,41) \
      76  X2(N,47) \
      77  X2(N,48) \
      78  X2(N,49) \
      79  X2(N,55) \
      80  X2(N,56) \
      81  X2(N,57) \
      82  X2(N,61) \
      83  X2(N,62) \
      84  X2(N,63)
      85  #define X() \
      86  X1(0) \
      87  X1(1) \
      88  X1(2) \
      89  X1(7) \
      90  X1(8) \
      91  X1(9) \
      92  X1(15) \
      93  X1(16) \
      94  X1(17) \
      95  X1(23) \
      96  X1(24) \
      97  X1(25) \
      98  X1(29) \
      99  X1(30) \
     100  X1(31) \
     101  X1(32) \
     102  X1(33) \
     103  X1(34) \
     104  X1(39) \
     105  X1(40) \
     106  X1(41) \
     107  X1(47) \
     108  X1(48) \
     109  X1(49) \
     110  X1(55) \
     111  X1(56) \
     112  X1(57) \
     113  X1(61) \
     114  X1(62) \
     115  X1(63)
     116  
     117  X()