1 //<MStar Software>
2 //******************************************************************************
3 // MStar Software
4 // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5 // All software, firmware and related documentation herein ("MStar Software") are
6 // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7 // law, including, but not limited to, copyright law and international treaties.
8 // Any use, modification, reproduction, retransmission, or republication of all
9 // or part of MStar Software is expressly prohibited, unless prior written
10 // permission has been granted by MStar.
11 //
12 // By accessing, browsing and/or using MStar Software, you acknowledge that you
13 // have read, understood, and agree, to be bound by below terms ("Terms") and to
14 // comply with all applicable laws and regulations:
15 //
16 // 1. MStar shall retain any and all right, ownership and interest to MStar
17 // Software and any modification/derivatives thereof.
18 // No right, ownership, or interest to MStar Software and any
19 // modification/derivatives thereof is transferred to you under Terms.
20 //
21 // 2. You understand that MStar Software might include, incorporate or be
22 // supplied together with third party`s software and the use of MStar
23 // Software may require additional licenses from third parties.
24 // Therefore, you hereby agree it is your sole responsibility to separately
25 // obtain any and all third party right and license necessary for your use of
26 // such third party`s software.
27 //
28 // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29 // MStar`s confidential information and you agree to keep MStar`s
30 // confidential information in strictest confidence and not disclose to any
31 // third party.
32 //
33 // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34 // kind. Any warranties are hereby expressly disclaimed by MStar, including
35 // without limitation, any warranties of merchantability, non-infringement of
36 // intellectual property rights, fitness for a particular purpose, error free
37 // and in conformity with any international standard. You agree to waive any
38 // claim against MStar for any loss, damage, cost or expense that you may
39 // incur related to your use of MStar Software.
40 // In no event shall MStar be liable for any direct, indirect, incidental or
41 // consequential damages, including without limitation, lost of profit or
42 // revenues, lost or damage of data, and unauthorized system use.
43 // You agree that this Section 4 shall still apply without being affected
44 // even if MStar Software has been modified by MStar in accordance with your
45 // request or instruction for your use, except otherwise agreed by both
46 // parties in writing.
47 //
48 // 5. If requested, MStar may from time to time provide technical supports or
49 // services in relation with MStar Software to you for your use of
50 // MStar Software in conjunction with your or your customer`s product
51 // ("Services").
52 // You understand and agree that, except otherwise agreed by both parties in
53 // writing, Services are provided on an "AS IS" basis and the warranty
54 // disclaimer set forth in Section 4 above shall apply.
55 //
56 // 6. Nothing contained herein shall be construed as by implication, estoppels
57 // or otherwise:
58 // (a) conferring any license or right to use MStar name, trademark, service
59 // mark, symbol or any other identification;
60 // (b) obligating MStar or any of its affiliates to furnish any person,
61 // including without limitation, you and your customers, any assistance
62 // of any kind whatsoever, or any information; or
63 // (c) conferring any license or right under any intellectual property right.
64 //
65 // 7. These terms shall be governed by and construed in accordance with the laws
66 // of Taiwan, R.O.C., excluding its conflict of law rules.
67 // Any and all dispute arising out hereof or related hereto shall be finally
68 // settled by arbitration referred to the Chinese Arbitration Association,
69 // Taipei in accordance with the ROC Arbitration Law and the Arbitration
70 // Rules of the Association by three (3) arbitrators appointed in accordance
71 // with the said Rules.
72 // The place of arbitration shall be in Taipei, Taiwan and the language shall
73 // be English.
74 // The arbitration award shall be final and binding to both parties.
75 //
76 //******************************************************************************
77 //<MStar Software>
78
79 #include "MFE_chip.h"
80
81 #ifdef _MFE_ENABLE_CRC64_
82 #include "CRC64.h"
83 #include "mfe_type.h"
84 #include "mfe_common.h"
85
86 #ifdef WIN32
87 #pragma optimize( "", off )
88 #endif
89 static void CRC64_BIT(BitArray* D, BitArray* X_next, MS_S32 interface_mode);
90
CRC_Init(CRC_INFO * pInfo)91 void CRC_Init(CRC_INFO* pInfo)
92 {
93 MS_S32 i;
94 for(i=0;i<8;i++)
95 pInfo->CRCValue[i] = 0;
96 pInfo->nLastBytes = 0;
97 pInfo->bIsLast = 0;
98 }
99
CRC_Generator(CRC_INFO * pInfo)100 void CRC_Generator(CRC_INFO* pInfo)
101 {
102 MS_S32 i=0, j=0, m, n, N_bits;
103 MS_S32 offset = 0;
104 MS_U8 data_new[8];
105
106 // Number of bits
107 N_bits = pInfo->nBufSize*8;
108
109 // Last remaining byte special handling
110 if (pInfo->nLastBytes!=0) {
111 MS_S32 nByteToFill = pInfo->nBufSize<8-pInfo->nLastBytes ? pInfo->nBufSize : 8-pInfo->nLastBytes;
112 for (j=0; j<pInfo->nLastBytes; j++)
113 data_new[j] = pInfo->TempBuf[j];
114 for (i=0; i<nByteToFill; i++)
115 data_new[j++] = pInfo->pBuf[i];
116 if (j<8) {
117 if (!pInfo->bIsLast) {
118 // Rollback and wait next round
119 pInfo->nLastBytes = j;
120 for (i=0; i<pInfo->nLastBytes; i++)
121 pInfo->TempBuf[i] = data_new[i];
122 return;
123 }
124 else {
125 for (j=j; j<8; j++)
126 data_new[j] = 0;
127 CRC64_BIT((BitArray*)data_new, (BitArray*)pInfo->CRCValue, 1);
128 pInfo->nLastBytes = 0;
129 return;
130 }
131 }
132 else {
133 CRC64_BIT((BitArray*)data_new, (BitArray*)pInfo->CRCValue, 1);
134 pInfo->nLastBytes = 0;
135 }
136 }
137 N_bits -= i*8;
138 offset = i;
139 for (i=0;i<N_bits/64;i++) {
140 // generate 64 bit at a time
141 for (j=0; j<8; j++)
142 data_new[j] = pInfo->pBuf[8*i+j+offset];
143 // call bit array CRC64 generator
144 CRC64_BIT((BitArray*)data_new, (BitArray*)pInfo->CRCValue, 1);
145 }
146 m = N_bits%64 ;
147 n = N_bits/64 ;
148 if(N_bits%64 != 0) {
149 if (!pInfo->bIsLast) {
150 for (j=0; j<m/8; j++)
151 pInfo->TempBuf[j] = pInfo->pBuf[8*n+j+offset];
152 pInfo->nLastBytes = j;
153 return;
154 }
155 // The last bytes
156 for (j=0; j<m/8; j++)
157 data_new[j] = pInfo->pBuf[8*n+j+offset];
158 for (j=m/8; j<8; j++)
159 data_new[j] = 0;
160 // call bit array CRC64 generator
161 CRC64_BIT((BitArray*)data_new, (BitArray*)pInfo->CRCValue, 1);
162 }
163 }
164
165
CRC_ACC_HW_Generator(CRC_INFO * pAllFrames,MS_U8 * crc)166 void CRC_ACC_HW_Generator(CRC_INFO* pAllFrames, MS_U8* crc)
167 {
168 MS_S32 i;
169 for (i=0; i<8; i++)
170 pAllFrames->CRCValue[i] += crc[i];
171
172 }
get_CRC_ACC_CRC(CRC_INFO * pAllFrames,CRC_INFO * pCurFrame)173 void get_CRC_ACC_CRC(CRC_INFO* pAllFrames, CRC_INFO* pCurFrame)
174 {
175 MS_S32 i;
176 for (i=0; i<8; i++)
177 pAllFrames->CRCValue[i] += pCurFrame->CRCValue[i];
178 }
179
CRC64_BIT(BitArray * D,BitArray * X_next,MS_S32 interface_mode)180 static void CRC64_BIT(BitArray* D, BitArray* X_next, MS_S32 interface_mode)
181 {
182 // implement CRC encoder with 32/64 bit I/O
183 // D[]: input bit array, 32-bit or 64-bit
184 // X_next[]: shift registers of size 64
185 // interface_mode: 0 for 32 bit I/O, 1 for 64 bit I/O
186 // the generator polynomial for CRC64 is x^64 + x^4 + x^3 + x + 1 (CRC-64-ISO)
187
188 BitArray X; // internal buffer
189
190 // initialization
191 memcpy(&X, X_next, sizeof(BitArray));
192 // for (MS_S32 i=0;i<64;i++) {
193 // X[i] = X_next[i]; // put the contents of 64 shift registers into internal buffer
194 // }
195
196 if (interface_mode == 0) { // 32 bit I/O
197 // update states of 64 shift registers
198 X_next->bit0 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit2^D->bit2^X.bit6^D->bit6^X.bit7^D->bit7^X.bit8^D->bit8^X.bit12^D->bit12^X.bit13^D->bit13^X.bit14^D->bit14^X.bit18^D->bit18^X.bit19^D->bit19^X.bit20^D->bit20^X.bit24^D->bit24^X.bit25^D->bit25^X.bit26^D->bit26^X.bit30^D->bit30^X.bit31^D->bit31^X.bit32;
199 X_next->bit1 = X.bit0^D->bit0^X.bit3^D->bit3^X.bit6^D->bit6^X.bit9^D->bit9^X.bit12^D->bit12^X.bit15^D->bit15^X.bit18^D->bit18^X.bit21^D->bit21^X.bit24^D->bit24^X.bit27^D->bit27^X.bit30^D->bit30^X.bit33;
200 X_next->bit2 = X.bit1^D->bit1^X.bit4^D->bit4^X.bit7^D->bit7^X.bit10^D->bit10^X.bit13^D->bit13^X.bit16^D->bit16^X.bit19^D->bit19^X.bit22^D->bit22^X.bit25^D->bit25^X.bit28^D->bit28^X.bit31^D->bit31^X.bit34;
201 X_next->bit3 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit5^D->bit5^X.bit6^D->bit6^X.bit7^D->bit7^X.bit11^D->bit11^X.bit12^D->bit12^X.bit13^D->bit13^X.bit17^D->bit17^X.bit18^D->bit18^X.bit19^D->bit19^X.bit23^D->bit23^X.bit24^D->bit24^X.bit25^D->bit25^X.bit29^D->bit29^X.bit30^D->bit30^X.bit31^D->bit31^X.bit35;
202 X_next->bit4 = X.bit36;
203 X_next->bit5 = X.bit37;
204 X_next->bit6 = X.bit38;
205 X_next->bit7 = X.bit39;
206 X_next->bit8 = X.bit40;
207 X_next->bit9 = X.bit41;
208 X_next->bit10 = X.bit42;
209 X_next->bit11 = X.bit43;
210 X_next->bit12 = X.bit44;
211 X_next->bit13 = X.bit45;
212 X_next->bit14 = X.bit46;
213 X_next->bit15 = X.bit47;
214 X_next->bit16 = X.bit48;
215 X_next->bit17 = X.bit49;
216 X_next->bit18 = X.bit50;
217 X_next->bit19 = X.bit51;
218 X_next->bit20 = X.bit52;
219 X_next->bit21 = X.bit53;
220 X_next->bit22 = X.bit54;
221 X_next->bit23 = X.bit55;
222 X_next->bit24 = X.bit56;
223 X_next->bit25 = X.bit57;
224 X_next->bit26 = X.bit58;
225 X_next->bit27 = X.bit59;
226 X_next->bit28 = X.bit60;
227 X_next->bit29 = X.bit61;
228 X_next->bit30 = X.bit62;
229 X_next->bit31 = X.bit63;
230 X_next->bit32 = X.bit0^D->bit0;
231 X_next->bit33 = X.bit0^D->bit0^X.bit1^D->bit1;
232 X_next->bit34 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit2^D->bit2;
233 X_next->bit35 = X.bit1^D->bit1^X.bit2^D->bit2^X.bit3^D->bit3;
234 X_next->bit36 = X.bit2^D->bit2^X.bit3^D->bit3^X.bit4^D->bit4;
235 X_next->bit37 = X.bit3^D->bit3^X.bit4^D->bit4^X.bit5^D->bit5;
236 X_next->bit38 = X.bit0^D->bit0^X.bit4^D->bit4^X.bit5^D->bit5^X.bit6^D->bit6;
237 X_next->bit39 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit5^D->bit5^X.bit6^D->bit6^X.bit7^D->bit7;
238 X_next->bit40 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit2^D->bit2^X.bit6^D->bit6^X.bit7^D->bit7^X.bit8^D->bit8;
239 X_next->bit41 = X.bit1^D->bit1^X.bit2^D->bit2^X.bit3^D->bit3^X.bit7^D->bit7^X.bit8^D->bit8^X.bit9^D->bit9;
240 X_next->bit42 = X.bit2^D->bit2^X.bit3^D->bit3^X.bit4^D->bit4^X.bit8^D->bit8^X.bit9^D->bit9^X.bit10^D->bit10;
241 X_next->bit43 = X.bit3^D->bit3^X.bit4^D->bit4^X.bit5^D->bit5^X.bit9^D->bit9^X.bit10^D->bit10^X.bit11^D->bit11;
242 X_next->bit44 = X.bit0^D->bit0^X.bit4^D->bit4^X.bit5^D->bit5^X.bit6^D->bit6^X.bit10^D->bit10^X.bit11^D->bit11^X.bit12^D->bit12;
243 X_next->bit45 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit5^D->bit5^X.bit6^D->bit6^X.bit7^D->bit7^X.bit11^D->bit11^X.bit12^D->bit12^X.bit13^D->bit13;
244 X_next->bit46 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit2^D->bit2^X.bit6^D->bit6^X.bit7^D->bit7^X.bit8^D->bit8^X.bit12^D->bit12^X.bit13^D->bit13^X.bit14^D->bit14;
245 X_next->bit47 = X.bit1^D->bit1^X.bit2^D->bit2^X.bit3^D->bit3^X.bit7^D->bit7^X.bit8^D->bit8^X.bit9^D->bit9^X.bit13^D->bit13^X.bit14^D->bit14^X.bit15^D->bit15;
246 X_next->bit48 = X.bit2^D->bit2^X.bit3^D->bit3^X.bit4^D->bit4^X.bit8^D->bit8^X.bit9^D->bit9^X.bit10^D->bit10^X.bit14^D->bit14^X.bit15^D->bit15^X.bit16^D->bit16;
247 X_next->bit49 = X.bit3^D->bit3^X.bit4^D->bit4^X.bit5^D->bit5^X.bit9^D->bit9^X.bit10^D->bit10^X.bit11^D->bit11^X.bit15^D->bit15^X.bit16^D->bit16^X.bit17^D->bit17;
248 X_next->bit50 = X.bit0^D->bit0^X.bit4^D->bit4^X.bit5^D->bit5^X.bit6^D->bit6^X.bit10^D->bit10^X.bit11^D->bit11^X.bit12^D->bit12^X.bit16^D->bit16^X.bit17^D->bit17^X.bit18^D->bit18;
249 X_next->bit51 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit5^D->bit5^X.bit6^D->bit6^X.bit7^D->bit7^X.bit11^D->bit11^X.bit12^D->bit12^X.bit13^D->bit13^X.bit17^D->bit17^X.bit18^D->bit18^X.bit19^D->bit19;
250 X_next->bit52 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit2^D->bit2^X.bit6^D->bit6^X.bit7^D->bit7^X.bit8^D->bit8^X.bit12^D->bit12^X.bit13^D->bit13^X.bit14^D->bit14^X.bit18^D->bit18^X.bit19^D->bit19^X.bit20^D->bit20;
251 X_next->bit53 = X.bit1^D->bit1^X.bit2^D->bit2^X.bit3^D->bit3^X.bit7^D->bit7^X.bit8^D->bit8^X.bit9^D->bit9^X.bit13^D->bit13^X.bit14^D->bit14^X.bit15^D->bit15^X.bit19^D->bit19^X.bit20^D->bit20^X.bit21^D->bit21;
252 X_next->bit54 = X.bit2^D->bit2^X.bit3^D->bit3^X.bit4^D->bit4^X.bit8^D->bit8^X.bit9^D->bit9^X.bit10^D->bit10^X.bit14^D->bit14^X.bit15^D->bit15^X.bit16^D->bit16^X.bit20^D->bit20^X.bit21^D->bit21^X.bit22^D->bit22;
253 X_next->bit55 = X.bit3^D->bit3^X.bit4^D->bit4^X.bit5^D->bit5^X.bit9^D->bit9^X.bit10^D->bit10^X.bit11^D->bit11^X.bit15^D->bit15^X.bit16^D->bit16^X.bit17^D->bit17^X.bit21^D->bit21^X.bit22^D->bit22^X.bit23^D->bit23;
254 X_next->bit56 = X.bit0^D->bit0^X.bit4^D->bit4^X.bit5^D->bit5^X.bit6^D->bit6^X.bit10^D->bit10^X.bit11^D->bit11^X.bit12^D->bit12^X.bit16^D->bit16^X.bit17^D->bit17^X.bit18^D->bit18^X.bit22^D->bit22^X.bit23^D->bit23^X.bit24^D->bit24;
255 X_next->bit57 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit5^D->bit5^X.bit6^D->bit6^X.bit7^D->bit7^X.bit11^D->bit11^X.bit12^D->bit12^X.bit13^D->bit13^X.bit17^D->bit17^X.bit18^D->bit18^X.bit19^D->bit19^X.bit23^D->bit23^X.bit24^D->bit24^X.bit25^D->bit25;
256 X_next->bit58 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit2^D->bit2^X.bit6^D->bit6^X.bit7^D->bit7^X.bit8^D->bit8^X.bit12^D->bit12^X.bit13^D->bit13^X.bit14^D->bit14^X.bit18^D->bit18^X.bit19^D->bit19^X.bit20^D->bit20^X.bit24^D->bit24^X.bit25^D->bit25^X.bit26^D->bit26;
257 X_next->bit59 = X.bit1^D->bit1^X.bit2^D->bit2^X.bit3^D->bit3^X.bit7^D->bit7^X.bit8^D->bit8^X.bit9^D->bit9^X.bit13^D->bit13^X.bit14^D->bit14^X.bit15^D->bit15^X.bit19^D->bit19^X.bit20^D->bit20^X.bit21^D->bit21^X.bit25^D->bit25^X.bit26^D->bit26^X.bit27^D->bit27;
258 X_next->bit60 = X.bit2^D->bit2^X.bit3^D->bit3^X.bit4^D->bit4^X.bit8^D->bit8^X.bit9^D->bit9^X.bit10^D->bit10^X.bit14^D->bit14^X.bit15^D->bit15^X.bit16^D->bit16^X.bit20^D->bit20^X.bit21^D->bit21^X.bit22^D->bit22^X.bit26^D->bit26^X.bit27^D->bit27^X.bit28^D->bit28;
259 X_next->bit61 = X.bit3^D->bit3^X.bit4^D->bit4^X.bit5^D->bit5^X.bit9^D->bit9^X.bit10^D->bit10^X.bit11^D->bit11^X.bit15^D->bit15^X.bit16^D->bit16^X.bit17^D->bit17^X.bit21^D->bit21^X.bit22^D->bit22^X.bit23^D->bit23^X.bit27^D->bit27^X.bit28^D->bit28^X.bit29^D->bit29;
260 X_next->bit62 = X.bit0^D->bit0^X.bit4^D->bit4^X.bit5^D->bit5^X.bit6^D->bit6^X.bit10^D->bit10^X.bit11^D->bit11^X.bit12^D->bit12^X.bit16^D->bit16^X.bit17^D->bit17^X.bit18^D->bit18^X.bit22^D->bit22^X.bit23^D->bit23^X.bit24^D->bit24^X.bit28^D->bit28^X.bit29^D->bit29^X.bit30^D->bit30;
261 X_next->bit63 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit5^D->bit5^X.bit6^D->bit6^X.bit7^D->bit7^X.bit11^D->bit11^X.bit12^D->bit12^X.bit13^D->bit13^X.bit17^D->bit17^X.bit18^D->bit18^X.bit19^D->bit19^X.bit23^D->bit23^X.bit24^D->bit24^X.bit25^D->bit25^X.bit29^D->bit29^X.bit30^D->bit30^X.bit31^D->bit31;
262 }
263 else { // 64-bit I/O
264 // update states of 64 shift registers
265 X_next->bit0 = X.bit0^D->bit0^X.bit2^D->bit2^X.bit3^D->bit3^X.bit4^D->bit4^X.bit8^D->bit8^X.bit9^D->bit9^X.bit10^D->bit10^X.bit14^D->bit14^X.bit15^D->bit15^X.bit16^D->bit16^X.bit20^D->bit20^X.bit21^D->bit21^X.bit22^D->bit22^X.bit26^D->bit26^X.bit27^D->bit27^X.bit28^D->bit28^X.bit32^D->bit32^X.bit33^D->bit33^X.bit34^D->bit34^X.bit38^D->bit38^X.bit39^D->bit39^X.bit40^D->bit40^X.bit44^D->bit44^X.bit45^D->bit45^X.bit46^D->bit46^X.bit50^D->bit50^X.bit51^D->bit51^X.bit52^D->bit52^X.bit56^D->bit56^X.bit57^D->bit57^X.bit58^D->bit58^X.bit62^D->bit62^X.bit63^D->bit63;
266 X_next->bit1 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit2^D->bit2^X.bit5^D->bit5^X.bit8^D->bit8^X.bit11^D->bit11^X.bit14^D->bit14^X.bit17^D->bit17^X.bit20^D->bit20^X.bit23^D->bit23^X.bit26^D->bit26^X.bit29^D->bit29^X.bit32^D->bit32^X.bit35^D->bit35^X.bit38^D->bit38^X.bit41^D->bit41^X.bit44^D->bit44^X.bit47^D->bit47^X.bit50^D->bit50^X.bit53^D->bit53^X.bit56^D->bit56^X.bit59^D->bit59^X.bit62^D->bit62;
267 X_next->bit2 = X.bit1^D->bit1^X.bit2^D->bit2^X.bit3^D->bit3^X.bit6^D->bit6^X.bit9^D->bit9^X.bit12^D->bit12^X.bit15^D->bit15^X.bit18^D->bit18^X.bit21^D->bit21^X.bit24^D->bit24^X.bit27^D->bit27^X.bit30^D->bit30^X.bit33^D->bit33^X.bit36^D->bit36^X.bit39^D->bit39^X.bit42^D->bit42^X.bit45^D->bit45^X.bit48^D->bit48^X.bit51^D->bit51^X.bit54^D->bit54^X.bit57^D->bit57^X.bit60^D->bit60^X.bit63^D->bit63;
268 X_next->bit3 = X.bit7^D->bit7^X.bit8^D->bit8^X.bit9^D->bit9^X.bit13^D->bit13^X.bit14^D->bit14^X.bit15^D->bit15^X.bit19^D->bit19^X.bit20^D->bit20^X.bit21^D->bit21^X.bit25^D->bit25^X.bit26^D->bit26^X.bit27^D->bit27^X.bit31^D->bit31^X.bit32^D->bit32^X.bit33^D->bit33^X.bit37^D->bit37^X.bit38^D->bit38^X.bit39^D->bit39^X.bit43^D->bit43^X.bit44^D->bit44^X.bit45^D->bit45^X.bit49^D->bit49^X.bit50^D->bit50^X.bit51^D->bit51^X.bit55^D->bit55^X.bit56^D->bit56^X.bit57^D->bit57^X.bit61^D->bit61^X.bit62^D->bit62^X.bit63^D->bit63;
269 X_next->bit4 = X.bit2^D->bit2^X.bit3^D->bit3^X.bit4^D->bit4;
270 X_next->bit5 = X.bit3^D->bit3^X.bit4^D->bit4^X.bit5^D->bit5;
271 X_next->bit6 = X.bit0^D->bit0^X.bit4^D->bit4^X.bit5^D->bit5^X.bit6^D->bit6;
272 X_next->bit7 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit5^D->bit5^X.bit6^D->bit6^X.bit7^D->bit7;
273 X_next->bit8 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit2^D->bit2^X.bit6^D->bit6^X.bit7^D->bit7^X.bit8^D->bit8;
274 X_next->bit9 = X.bit1^D->bit1^X.bit2^D->bit2^X.bit3^D->bit3^X.bit7^D->bit7^X.bit8^D->bit8^X.bit9^D->bit9;
275 X_next->bit10 = X.bit2^D->bit2^X.bit3^D->bit3^X.bit4^D->bit4^X.bit8^D->bit8^X.bit9^D->bit9^X.bit10^D->bit10;
276 X_next->bit11 = X.bit3^D->bit3^X.bit4^D->bit4^X.bit5^D->bit5^X.bit9^D->bit9^X.bit10^D->bit10^X.bit11^D->bit11;
277 X_next->bit12 = X.bit0^D->bit0^X.bit4^D->bit4^X.bit5^D->bit5^X.bit6^D->bit6^X.bit10^D->bit10^X.bit11^D->bit11^X.bit12^D->bit12;
278 X_next->bit13 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit5^D->bit5^X.bit6^D->bit6^X.bit7^D->bit7^X.bit11^D->bit11^X.bit12^D->bit12^X.bit13^D->bit13;
279 X_next->bit14 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit2^D->bit2^X.bit6^D->bit6^X.bit7^D->bit7^X.bit8^D->bit8^X.bit12^D->bit12^X.bit13^D->bit13^X.bit14^D->bit14;
280 X_next->bit15 = X.bit1^D->bit1^X.bit2^D->bit2^X.bit3^D->bit3^X.bit7^D->bit7^X.bit8^D->bit8^X.bit9^D->bit9^X.bit13^D->bit13^X.bit14^D->bit14^X.bit15^D->bit15;
281 X_next->bit16 = X.bit2^D->bit2^X.bit3^D->bit3^X.bit4^D->bit4^X.bit8^D->bit8^X.bit9^D->bit9^X.bit10^D->bit10^X.bit14^D->bit14^X.bit15^D->bit15^X.bit16^D->bit16;
282 X_next->bit17 = X.bit3^D->bit3^X.bit4^D->bit4^X.bit5^D->bit5^X.bit9^D->bit9^X.bit10^D->bit10^X.bit11^D->bit11^X.bit15^D->bit15^X.bit16^D->bit16^X.bit17^D->bit17;
283 X_next->bit18 = X.bit0^D->bit0^X.bit4^D->bit4^X.bit5^D->bit5^X.bit6^D->bit6^X.bit10^D->bit10^X.bit11^D->bit11^X.bit12^D->bit12^X.bit16^D->bit16^X.bit17^D->bit17^X.bit18^D->bit18;
284 X_next->bit19 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit5^D->bit5^X.bit6^D->bit6^X.bit7^D->bit7^X.bit11^D->bit11^X.bit12^D->bit12^X.bit13^D->bit13^X.bit17^D->bit17^X.bit18^D->bit18^X.bit19^D->bit19;
285 X_next->bit20 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit2^D->bit2^X.bit6^D->bit6^X.bit7^D->bit7^X.bit8^D->bit8^X.bit12^D->bit12^X.bit13^D->bit13^X.bit14^D->bit14^X.bit18^D->bit18^X.bit19^D->bit19^X.bit20^D->bit20;
286 X_next->bit21 = X.bit1^D->bit1^X.bit2^D->bit2^X.bit3^D->bit3^X.bit7^D->bit7^X.bit8^D->bit8^X.bit9^D->bit9^X.bit13^D->bit13^X.bit14^D->bit14^X.bit15^D->bit15^X.bit19^D->bit19^X.bit20^D->bit20^X.bit21^D->bit21;
287 X_next->bit22 = X.bit2^D->bit2^X.bit3^D->bit3^X.bit4^D->bit4^X.bit8^D->bit8^X.bit9^D->bit9^X.bit10^D->bit10^X.bit14^D->bit14^X.bit15^D->bit15^X.bit16^D->bit16^X.bit20^D->bit20^X.bit21^D->bit21^X.bit22^D->bit22;
288 X_next->bit23 = X.bit3^D->bit3^X.bit4^D->bit4^X.bit5^D->bit5^X.bit9^D->bit9^X.bit10^D->bit10^X.bit11^D->bit11^X.bit15^D->bit15^X.bit16^D->bit16^X.bit17^D->bit17^X.bit21^D->bit21^X.bit22^D->bit22^X.bit23^D->bit23;
289 X_next->bit24 = X.bit0^D->bit0^X.bit4^D->bit4^X.bit5^D->bit5^X.bit6^D->bit6^X.bit10^D->bit10^X.bit11^D->bit11^X.bit12^D->bit12^X.bit16^D->bit16^X.bit17^D->bit17^X.bit18^D->bit18^X.bit22^D->bit22^X.bit23^D->bit23^X.bit24^D->bit24;
290 X_next->bit25 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit5^D->bit5^X.bit6^D->bit6^X.bit7^D->bit7^X.bit11^D->bit11^X.bit12^D->bit12^X.bit13^D->bit13^X.bit17^D->bit17^X.bit18^D->bit18^X.bit19^D->bit19^X.bit23^D->bit23^X.bit24^D->bit24^X.bit25^D->bit25;
291 X_next->bit26 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit2^D->bit2^X.bit6^D->bit6^X.bit7^D->bit7^X.bit8^D->bit8^X.bit12^D->bit12^X.bit13^D->bit13^X.bit14^D->bit14^X.bit18^D->bit18^X.bit19^D->bit19^X.bit20^D->bit20^X.bit24^D->bit24^X.bit25^D->bit25^X.bit26^D->bit26;
292 X_next->bit27 = X.bit1^D->bit1^X.bit2^D->bit2^X.bit3^D->bit3^X.bit7^D->bit7^X.bit8^D->bit8^X.bit9^D->bit9^X.bit13^D->bit13^X.bit14^D->bit14^X.bit15^D->bit15^X.bit19^D->bit19^X.bit20^D->bit20^X.bit21^D->bit21^X.bit25^D->bit25^X.bit26^D->bit26^X.bit27^D->bit27;
293 X_next->bit28 = X.bit2^D->bit2^X.bit3^D->bit3^X.bit4^D->bit4^X.bit8^D->bit8^X.bit9^D->bit9^X.bit10^D->bit10^X.bit14^D->bit14^X.bit15^D->bit15^X.bit16^D->bit16^X.bit20^D->bit20^X.bit21^D->bit21^X.bit22^D->bit22^X.bit26^D->bit26^X.bit27^D->bit27^X.bit28^D->bit28;
294 X_next->bit29 = X.bit3^D->bit3^X.bit4^D->bit4^X.bit5^D->bit5^X.bit9^D->bit9^X.bit10^D->bit10^X.bit11^D->bit11^X.bit15^D->bit15^X.bit16^D->bit16^X.bit17^D->bit17^X.bit21^D->bit21^X.bit22^D->bit22^X.bit23^D->bit23^X.bit27^D->bit27^X.bit28^D->bit28^X.bit29^D->bit29;
295 X_next->bit30 = X.bit0^D->bit0^X.bit4^D->bit4^X.bit5^D->bit5^X.bit6^D->bit6^X.bit10^D->bit10^X.bit11^D->bit11^X.bit12^D->bit12^X.bit16^D->bit16^X.bit17^D->bit17^X.bit18^D->bit18^X.bit22^D->bit22^X.bit23^D->bit23^X.bit24^D->bit24^X.bit28^D->bit28^X.bit29^D->bit29^X.bit30^D->bit30;
296 X_next->bit31 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit5^D->bit5^X.bit6^D->bit6^X.bit7^D->bit7^X.bit11^D->bit11^X.bit12^D->bit12^X.bit13^D->bit13^X.bit17^D->bit17^X.bit18^D->bit18^X.bit19^D->bit19^X.bit23^D->bit23^X.bit24^D->bit24^X.bit25^D->bit25^X.bit29^D->bit29^X.bit30^D->bit30^X.bit31^D->bit31;
297 X_next->bit32 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit2^D->bit2^X.bit6^D->bit6^X.bit7^D->bit7^X.bit8^D->bit8^X.bit12^D->bit12^X.bit13^D->bit13^X.bit14^D->bit14^X.bit18^D->bit18^X.bit19^D->bit19^X.bit20^D->bit20^X.bit24^D->bit24^X.bit25^D->bit25^X.bit26^D->bit26^X.bit30^D->bit30^X.bit31^D->bit31^X.bit32^D->bit32;
298 X_next->bit33 = X.bit1^D->bit1^X.bit2^D->bit2^X.bit3^D->bit3^X.bit7^D->bit7^X.bit8^D->bit8^X.bit9^D->bit9^X.bit13^D->bit13^X.bit14^D->bit14^X.bit15^D->bit15^X.bit19^D->bit19^X.bit20^D->bit20^X.bit21^D->bit21^X.bit25^D->bit25^X.bit26^D->bit26^X.bit27^D->bit27^X.bit31^D->bit31^X.bit32^D->bit32^X.bit33^D->bit33;
299 X_next->bit34 = X.bit2^D->bit2^X.bit3^D->bit3^X.bit4^D->bit4^X.bit8^D->bit8^X.bit9^D->bit9^X.bit10^D->bit10^X.bit14^D->bit14^X.bit15^D->bit15^X.bit16^D->bit16^X.bit20^D->bit20^X.bit21^D->bit21^X.bit22^D->bit22^X.bit26^D->bit26^X.bit27^D->bit27^X.bit28^D->bit28^X.bit32^D->bit32^X.bit33^D->bit33^X.bit34^D->bit34;
300 X_next->bit35 = X.bit3^D->bit3^X.bit4^D->bit4^X.bit5^D->bit5^X.bit9^D->bit9^X.bit10^D->bit10^X.bit11^D->bit11^X.bit15^D->bit15^X.bit16^D->bit16^X.bit17^D->bit17^X.bit21^D->bit21^X.bit22^D->bit22^X.bit23^D->bit23^X.bit27^D->bit27^X.bit28^D->bit28^X.bit29^D->bit29^X.bit33^D->bit33^X.bit34^D->bit34^X.bit35^D->bit35;
301 X_next->bit36 = X.bit0^D->bit0^X.bit4^D->bit4^X.bit5^D->bit5^X.bit6^D->bit6^X.bit10^D->bit10^X.bit11^D->bit11^X.bit12^D->bit12^X.bit16^D->bit16^X.bit17^D->bit17^X.bit18^D->bit18^X.bit22^D->bit22^X.bit23^D->bit23^X.bit24^D->bit24^X.bit28^D->bit28^X.bit29^D->bit29^X.bit30^D->bit30^X.bit34^D->bit34^X.bit35^D->bit35^X.bit36^D->bit36;
302 X_next->bit37 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit5^D->bit5^X.bit6^D->bit6^X.bit7^D->bit7^X.bit11^D->bit11^X.bit12^D->bit12^X.bit13^D->bit13^X.bit17^D->bit17^X.bit18^D->bit18^X.bit19^D->bit19^X.bit23^D->bit23^X.bit24^D->bit24^X.bit25^D->bit25^X.bit29^D->bit29^X.bit30^D->bit30^X.bit31^D->bit31^X.bit35^D->bit35^X.bit36^D->bit36^X.bit37^D->bit37;
303 X_next->bit38 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit2^D->bit2^X.bit6^D->bit6^X.bit7^D->bit7^X.bit8^D->bit8^X.bit12^D->bit12^X.bit13^D->bit13^X.bit14^D->bit14^X.bit18^D->bit18^X.bit19^D->bit19^X.bit20^D->bit20^X.bit24^D->bit24^X.bit25^D->bit25^X.bit26^D->bit26^X.bit30^D->bit30^X.bit31^D->bit31^X.bit32^D->bit32^X.bit36^D->bit36^X.bit37^D->bit37^X.bit38^D->bit38;
304 X_next->bit39 = X.bit1^D->bit1^X.bit2^D->bit2^X.bit3^D->bit3^X.bit7^D->bit7^X.bit8^D->bit8^X.bit9^D->bit9^X.bit13^D->bit13^X.bit14^D->bit14^X.bit15^D->bit15^X.bit19^D->bit19^X.bit20^D->bit20^X.bit21^D->bit21^X.bit25^D->bit25^X.bit26^D->bit26^X.bit27^D->bit27^X.bit31^D->bit31^X.bit32^D->bit32^X.bit33^D->bit33^X.bit37^D->bit37^X.bit38^D->bit38^X.bit39^D->bit39;
305 X_next->bit40 = X.bit2^D->bit2^X.bit3^D->bit3^X.bit4^D->bit4^X.bit8^D->bit8^X.bit9^D->bit9^X.bit10^D->bit10^X.bit14^D->bit14^X.bit15^D->bit15^X.bit16^D->bit16^X.bit20^D->bit20^X.bit21^D->bit21^X.bit22^D->bit22^X.bit26^D->bit26^X.bit27^D->bit27^X.bit28^D->bit28^X.bit32^D->bit32^X.bit33^D->bit33^X.bit34^D->bit34^X.bit38^D->bit38^X.bit39^D->bit39^X.bit40^D->bit40;
306 X_next->bit41 = X.bit3^D->bit3^X.bit4^D->bit4^X.bit5^D->bit5^X.bit9^D->bit9^X.bit10^D->bit10^X.bit11^D->bit11^X.bit15^D->bit15^X.bit16^D->bit16^X.bit17^D->bit17^X.bit21^D->bit21^X.bit22^D->bit22^X.bit23^D->bit23^X.bit27^D->bit27^X.bit28^D->bit28^X.bit29^D->bit29^X.bit33^D->bit33^X.bit34^D->bit34^X.bit35^D->bit35^X.bit39^D->bit39^X.bit40^D->bit40^X.bit41^D->bit41;
307 X_next->bit42 = X.bit0^D->bit0^X.bit4^D->bit4^X.bit5^D->bit5^X.bit6^D->bit6^X.bit10^D->bit10^X.bit11^D->bit11^X.bit12^D->bit12^X.bit16^D->bit16^X.bit17^D->bit17^X.bit18^D->bit18^X.bit22^D->bit22^X.bit23^D->bit23^X.bit24^D->bit24^X.bit28^D->bit28^X.bit29^D->bit29^X.bit30^D->bit30^X.bit34^D->bit34^X.bit35^D->bit35^X.bit36^D->bit36^X.bit40^D->bit40^X.bit41^D->bit41^X.bit42^D->bit42;
308 X_next->bit43 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit5^D->bit5^X.bit6^D->bit6^X.bit7^D->bit7^X.bit11^D->bit11^X.bit12^D->bit12^X.bit13^D->bit13^X.bit17^D->bit17^X.bit18^D->bit18^X.bit19^D->bit19^X.bit23^D->bit23^X.bit24^D->bit24^X.bit25^D->bit25^X.bit29^D->bit29^X.bit30^D->bit30^X.bit31^D->bit31^X.bit35^D->bit35^X.bit36^D->bit36^X.bit37^D->bit37^X.bit41^D->bit41^X.bit42^D->bit42^X.bit43^D->bit43;
309 X_next->bit44 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit2^D->bit2^X.bit6^D->bit6^X.bit7^D->bit7^X.bit8^D->bit8^X.bit12^D->bit12^X.bit13^D->bit13^X.bit14^D->bit14^X.bit18^D->bit18^X.bit19^D->bit19^X.bit20^D->bit20^X.bit24^D->bit24^X.bit25^D->bit25^X.bit26^D->bit26^X.bit30^D->bit30^X.bit31^D->bit31^X.bit32^D->bit32^X.bit36^D->bit36^X.bit37^D->bit37^X.bit38^D->bit38^X.bit42^D->bit42^X.bit43^D->bit43^X.bit44^D->bit44;
310 X_next->bit45 = X.bit1^D->bit1^X.bit2^D->bit2^X.bit3^D->bit3^X.bit7^D->bit7^X.bit8^D->bit8^X.bit9^D->bit9^X.bit13^D->bit13^X.bit14^D->bit14^X.bit15^D->bit15^X.bit19^D->bit19^X.bit20^D->bit20^X.bit21^D->bit21^X.bit25^D->bit25^X.bit26^D->bit26^X.bit27^D->bit27^X.bit31^D->bit31^X.bit32^D->bit32^X.bit33^D->bit33^X.bit37^D->bit37^X.bit38^D->bit38^X.bit39^D->bit39^X.bit43^D->bit43^X.bit44^D->bit44^X.bit45^D->bit45;
311 X_next->bit46 = X.bit2^D->bit2^X.bit3^D->bit3^X.bit4^D->bit4^X.bit8^D->bit8^X.bit9^D->bit9^X.bit10^D->bit10^X.bit14^D->bit14^X.bit15^D->bit15^X.bit16^D->bit16^X.bit20^D->bit20^X.bit21^D->bit21^X.bit22^D->bit22^X.bit26^D->bit26^X.bit27^D->bit27^X.bit28^D->bit28^X.bit32^D->bit32^X.bit33^D->bit33^X.bit34^D->bit34^X.bit38^D->bit38^X.bit39^D->bit39^X.bit40^D->bit40^X.bit44^D->bit44^X.bit45^D->bit45^X.bit46^D->bit46;
312 X_next->bit47 = X.bit3^D->bit3^X.bit4^D->bit4^X.bit5^D->bit5^X.bit9^D->bit9^X.bit10^D->bit10^X.bit11^D->bit11^X.bit15^D->bit15^X.bit16^D->bit16^X.bit17^D->bit17^X.bit21^D->bit21^X.bit22^D->bit22^X.bit23^D->bit23^X.bit27^D->bit27^X.bit28^D->bit28^X.bit29^D->bit29^X.bit33^D->bit33^X.bit34^D->bit34^X.bit35^D->bit35^X.bit39^D->bit39^X.bit40^D->bit40^X.bit41^D->bit41^X.bit45^D->bit45^X.bit46^D->bit46^X.bit47^D->bit47;
313 X_next->bit48 = X.bit0^D->bit0^X.bit4^D->bit4^X.bit5^D->bit5^X.bit6^D->bit6^X.bit10^D->bit10^X.bit11^D->bit11^X.bit12^D->bit12^X.bit16^D->bit16^X.bit17^D->bit17^X.bit18^D->bit18^X.bit22^D->bit22^X.bit23^D->bit23^X.bit24^D->bit24^X.bit28^D->bit28^X.bit29^D->bit29^X.bit30^D->bit30^X.bit34^D->bit34^X.bit35^D->bit35^X.bit36^D->bit36^X.bit40^D->bit40^X.bit41^D->bit41^X.bit42^D->bit42^X.bit46^D->bit46^X.bit47^D->bit47^X.bit48^D->bit48;
314 X_next->bit49 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit5^D->bit5^X.bit6^D->bit6^X.bit7^D->bit7^X.bit11^D->bit11^X.bit12^D->bit12^X.bit13^D->bit13^X.bit17^D->bit17^X.bit18^D->bit18^X.bit19^D->bit19^X.bit23^D->bit23^X.bit24^D->bit24^X.bit25^D->bit25^X.bit29^D->bit29^X.bit30^D->bit30^X.bit31^D->bit31^X.bit35^D->bit35^X.bit36^D->bit36^X.bit37^D->bit37^X.bit41^D->bit41^X.bit42^D->bit42^X.bit43^D->bit43^X.bit47^D->bit47^X.bit48^D->bit48^X.bit49^D->bit49;
315 X_next->bit50 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit2^D->bit2^X.bit6^D->bit6^X.bit7^D->bit7^X.bit8^D->bit8^X.bit12^D->bit12^X.bit13^D->bit13^X.bit14^D->bit14^X.bit18^D->bit18^X.bit19^D->bit19^X.bit20^D->bit20^X.bit24^D->bit24^X.bit25^D->bit25^X.bit26^D->bit26^X.bit30^D->bit30^X.bit31^D->bit31^X.bit32^D->bit32^X.bit36^D->bit36^X.bit37^D->bit37^X.bit38^D->bit38^X.bit42^D->bit42^X.bit43^D->bit43^X.bit44^D->bit44^X.bit48^D->bit48^X.bit49^D->bit49^X.bit50^D->bit50;
316 X_next->bit51 = X.bit1^D->bit1^X.bit2^D->bit2^X.bit3^D->bit3^X.bit7^D->bit7^X.bit8^D->bit8^X.bit9^D->bit9^X.bit13^D->bit13^X.bit14^D->bit14^X.bit15^D->bit15^X.bit19^D->bit19^X.bit20^D->bit20^X.bit21^D->bit21^X.bit25^D->bit25^X.bit26^D->bit26^X.bit27^D->bit27^X.bit31^D->bit31^X.bit32^D->bit32^X.bit33^D->bit33^X.bit37^D->bit37^X.bit38^D->bit38^X.bit39^D->bit39^X.bit43^D->bit43^X.bit44^D->bit44^X.bit45^D->bit45^X.bit49^D->bit49^X.bit50^D->bit50^X.bit51^D->bit51;
317 X_next->bit52 = X.bit2^D->bit2^X.bit3^D->bit3^X.bit4^D->bit4^X.bit8^D->bit8^X.bit9^D->bit9^X.bit10^D->bit10^X.bit14^D->bit14^X.bit15^D->bit15^X.bit16^D->bit16^X.bit20^D->bit20^X.bit21^D->bit21^X.bit22^D->bit22^X.bit26^D->bit26^X.bit27^D->bit27^X.bit28^D->bit28^X.bit32^D->bit32^X.bit33^D->bit33^X.bit34^D->bit34^X.bit38^D->bit38^X.bit39^D->bit39^X.bit40^D->bit40^X.bit44^D->bit44^X.bit45^D->bit45^X.bit46^D->bit46^X.bit50^D->bit50^X.bit51^D->bit51^X.bit52^D->bit52;
318 X_next->bit53 = X.bit3^D->bit3^X.bit4^D->bit4^X.bit5^D->bit5^X.bit9^D->bit9^X.bit10^D->bit10^X.bit11^D->bit11^X.bit15^D->bit15^X.bit16^D->bit16^X.bit17^D->bit17^X.bit21^D->bit21^X.bit22^D->bit22^X.bit23^D->bit23^X.bit27^D->bit27^X.bit28^D->bit28^X.bit29^D->bit29^X.bit33^D->bit33^X.bit34^D->bit34^X.bit35^D->bit35^X.bit39^D->bit39^X.bit40^D->bit40^X.bit41^D->bit41^X.bit45^D->bit45^X.bit46^D->bit46^X.bit47^D->bit47^X.bit51^D->bit51^X.bit52^D->bit52^X.bit53^D->bit53;
319 X_next->bit54 = X.bit0^D->bit0^X.bit4^D->bit4^X.bit5^D->bit5^X.bit6^D->bit6^X.bit10^D->bit10^X.bit11^D->bit11^X.bit12^D->bit12^X.bit16^D->bit16^X.bit17^D->bit17^X.bit18^D->bit18^X.bit22^D->bit22^X.bit23^D->bit23^X.bit24^D->bit24^X.bit28^D->bit28^X.bit29^D->bit29^X.bit30^D->bit30^X.bit34^D->bit34^X.bit35^D->bit35^X.bit36^D->bit36^X.bit40^D->bit40^X.bit41^D->bit41^X.bit42^D->bit42^X.bit46^D->bit46^X.bit47^D->bit47^X.bit48^D->bit48^X.bit52^D->bit52^X.bit53^D->bit53^X.bit54^D->bit54;
320 X_next->bit55 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit5^D->bit5^X.bit6^D->bit6^X.bit7^D->bit7^X.bit11^D->bit11^X.bit12^D->bit12^X.bit13^D->bit13^X.bit17^D->bit17^X.bit18^D->bit18^X.bit19^D->bit19^X.bit23^D->bit23^X.bit24^D->bit24^X.bit25^D->bit25^X.bit29^D->bit29^X.bit30^D->bit30^X.bit31^D->bit31^X.bit35^D->bit35^X.bit36^D->bit36^X.bit37^D->bit37^X.bit41^D->bit41^X.bit42^D->bit42^X.bit43^D->bit43^X.bit47^D->bit47^X.bit48^D->bit48^X.bit49^D->bit49^X.bit53^D->bit53^X.bit54^D->bit54^X.bit55^D->bit55;
321 X_next->bit56 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit2^D->bit2^X.bit6^D->bit6^X.bit7^D->bit7^X.bit8^D->bit8^X.bit12^D->bit12^X.bit13^D->bit13^X.bit14^D->bit14^X.bit18^D->bit18^X.bit19^D->bit19^X.bit20^D->bit20^X.bit24^D->bit24^X.bit25^D->bit25^X.bit26^D->bit26^X.bit30^D->bit30^X.bit31^D->bit31^X.bit32^D->bit32^X.bit36^D->bit36^X.bit37^D->bit37^X.bit38^D->bit38^X.bit42^D->bit42^X.bit43^D->bit43^X.bit44^D->bit44^X.bit48^D->bit48^X.bit49^D->bit49^X.bit50^D->bit50^X.bit54^D->bit54^X.bit55^D->bit55^X.bit56^D->bit56;
322 X_next->bit57 = X.bit1^D->bit1^X.bit2^D->bit2^X.bit3^D->bit3^X.bit7^D->bit7^X.bit8^D->bit8^X.bit9^D->bit9^X.bit13^D->bit13^X.bit14^D->bit14^X.bit15^D->bit15^X.bit19^D->bit19^X.bit20^D->bit20^X.bit21^D->bit21^X.bit25^D->bit25^X.bit26^D->bit26^X.bit27^D->bit27^X.bit31^D->bit31^X.bit32^D->bit32^X.bit33^D->bit33^X.bit37^D->bit37^X.bit38^D->bit38^X.bit39^D->bit39^X.bit43^D->bit43^X.bit44^D->bit44^X.bit45^D->bit45^X.bit49^D->bit49^X.bit50^D->bit50^X.bit51^D->bit51^X.bit55^D->bit55^X.bit56^D->bit56^X.bit57^D->bit57;
323 X_next->bit58 = X.bit2^D->bit2^X.bit3^D->bit3^X.bit4^D->bit4^X.bit8^D->bit8^X.bit9^D->bit9^X.bit10^D->bit10^X.bit14^D->bit14^X.bit15^D->bit15^X.bit16^D->bit16^X.bit20^D->bit20^X.bit21^D->bit21^X.bit22^D->bit22^X.bit26^D->bit26^X.bit27^D->bit27^X.bit28^D->bit28^X.bit32^D->bit32^X.bit33^D->bit33^X.bit34^D->bit34^X.bit38^D->bit38^X.bit39^D->bit39^X.bit40^D->bit40^X.bit44^D->bit44^X.bit45^D->bit45^X.bit46^D->bit46^X.bit50^D->bit50^X.bit51^D->bit51^X.bit52^D->bit52^X.bit56^D->bit56^X.bit57^D->bit57^X.bit58^D->bit58;
324 X_next->bit59 = X.bit3^D->bit3^X.bit4^D->bit4^X.bit5^D->bit5^X.bit9^D->bit9^X.bit10^D->bit10^X.bit11^D->bit11^X.bit15^D->bit15^X.bit16^D->bit16^X.bit17^D->bit17^X.bit21^D->bit21^X.bit22^D->bit22^X.bit23^D->bit23^X.bit27^D->bit27^X.bit28^D->bit28^X.bit29^D->bit29^X.bit33^D->bit33^X.bit34^D->bit34^X.bit35^D->bit35^X.bit39^D->bit39^X.bit40^D->bit40^X.bit41^D->bit41^X.bit45^D->bit45^X.bit46^D->bit46^X.bit47^D->bit47^X.bit51^D->bit51^X.bit52^D->bit52^X.bit53^D->bit53^X.bit57^D->bit57^X.bit58^D->bit58^X.bit59^D->bit59;
325 X_next->bit60 = X.bit0^D->bit0^X.bit4^D->bit4^X.bit5^D->bit5^X.bit6^D->bit6^X.bit10^D->bit10^X.bit11^D->bit11^X.bit12^D->bit12^X.bit16^D->bit16^X.bit17^D->bit17^X.bit18^D->bit18^X.bit22^D->bit22^X.bit23^D->bit23^X.bit24^D->bit24^X.bit28^D->bit28^X.bit29^D->bit29^X.bit30^D->bit30^X.bit34^D->bit34^X.bit35^D->bit35^X.bit36^D->bit36^X.bit40^D->bit40^X.bit41^D->bit41^X.bit42^D->bit42^X.bit46^D->bit46^X.bit47^D->bit47^X.bit48^D->bit48^X.bit52^D->bit52^X.bit53^D->bit53^X.bit54^D->bit54^X.bit58^D->bit58^X.bit59^D->bit59^X.bit60^D->bit60;
326 X_next->bit61 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit5^D->bit5^X.bit6^D->bit6^X.bit7^D->bit7^X.bit11^D->bit11^X.bit12^D->bit12^X.bit13^D->bit13^X.bit17^D->bit17^X.bit18^D->bit18^X.bit19^D->bit19^X.bit23^D->bit23^X.bit24^D->bit24^X.bit25^D->bit25^X.bit29^D->bit29^X.bit30^D->bit30^X.bit31^D->bit31^X.bit35^D->bit35^X.bit36^D->bit36^X.bit37^D->bit37^X.bit41^D->bit41^X.bit42^D->bit42^X.bit43^D->bit43^X.bit47^D->bit47^X.bit48^D->bit48^X.bit49^D->bit49^X.bit53^D->bit53^X.bit54^D->bit54^X.bit55^D->bit55^X.bit59^D->bit59^X.bit60^D->bit60^X.bit61^D->bit61;
327 X_next->bit62 = X.bit0^D->bit0^X.bit1^D->bit1^X.bit2^D->bit2^X.bit6^D->bit6^X.bit7^D->bit7^X.bit8^D->bit8^X.bit12^D->bit12^X.bit13^D->bit13^X.bit14^D->bit14^X.bit18^D->bit18^X.bit19^D->bit19^X.bit20^D->bit20^X.bit24^D->bit24^X.bit25^D->bit25^X.bit26^D->bit26^X.bit30^D->bit30^X.bit31^D->bit31^X.bit32^D->bit32^X.bit36^D->bit36^X.bit37^D->bit37^X.bit38^D->bit38^X.bit42^D->bit42^X.bit43^D->bit43^X.bit44^D->bit44^X.bit48^D->bit48^X.bit49^D->bit49^X.bit50^D->bit50^X.bit54^D->bit54^X.bit55^D->bit55^X.bit56^D->bit56^X.bit60^D->bit60^X.bit61^D->bit61^X.bit62^D->bit62;
328 X_next->bit63 = X.bit1^D->bit1^X.bit2^D->bit2^X.bit3^D->bit3^X.bit7^D->bit7^X.bit8^D->bit8^X.bit9^D->bit9^X.bit13^D->bit13^X.bit14^D->bit14^X.bit15^D->bit15^X.bit19^D->bit19^X.bit20^D->bit20^X.bit21^D->bit21^X.bit25^D->bit25^X.bit26^D->bit26^X.bit27^D->bit27^X.bit31^D->bit31^X.bit32^D->bit32^X.bit33^D->bit33^X.bit37^D->bit37^X.bit38^D->bit38^X.bit39^D->bit39^X.bit43^D->bit43^X.bit44^D->bit44^X.bit45^D->bit45^X.bit49^D->bit49^X.bit50^D->bit50^X.bit51^D->bit51^X.bit55^D->bit55^X.bit56^D->bit56^X.bit57^D->bit57^X.bit61^D->bit61^X.bit62^D->bit62^X.bit63^D->bit63;
329 }
330 }
331 #ifdef WIN32
332 #pragma optimize( "", on )
333 #endif
334 #endif
335
336