xref: /utopia/UTPA2-700.0.x/modules/mfe/drv/mfe_ex/cModel/CRC64.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
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