Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / sam-t2 / sam / cpus / vonk / bl / lib / ecc / src / BL_CKEcc.cc
CommitLineData
920dae64
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: BL_CKEcc.cc
4// Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
5// DO NOT ALTER OR REMOVE COPYRIGHT NOTICES.
6//
7// The above named program is free software; you can redistribute it and/or
8// modify it under the terms of the GNU General Public
9// License version 2 as published by the Free Software Foundation.
10//
11// The above named program is distributed in the hope that it will be
12// useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14// General Public License for more details.
15//
16// You should have received a copy of the GNU General Public
17// License along with this work; if not, write to the Free Software
18// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
19//
20// ========== Copyright Header End ============================================
21/************************************************************************
22**
23** Copyright (C) 2006, Sun Microsystems, Inc.
24**
25** Sun considers its source code as an unpublished, proprietary
26** trade secret and it is available only under strict license provisions.
27** This copyright notice is placed here only to protect Sun in the event
28** the source is deemed a published work. Disassembly, decompilation,
29** or other means of reducing the object code to human readable form
30** is prohibited by the license agreement under which this code is
31** provided to the user or company in possession of this copy.
32**
33*************************************************************************/
34#include "BL_CKEcc.h"
35
36using namespace std;
37
38const int BL_CKEccFile::syndrome[1024][2] =
39{
40 {0,0},
41 /* 1 */
42 {0x1101, 0x1011}, {0x2109, 0x9012}, {0x310e, 0xe013}, {0x410d, 0xd014},
43 {0x510b, 0xb015}, {0x6107, 0x7016}, {0x7106, 0x6017}, {0x810f, 0xf018},
44 {0x9102, 0x2019}, {0xa10c, 0xc01a}, {0xb105, 0x501b}, {0xc10a, 0xa01c},
45 {0xd104, 0x401d}, {0xe103, 0x301e}, {0xf108, 0x801f}, {0x1011, 0x1101},
46 {0x2019, 0x9102}, {0x301e, 0xe103}, {0x401d, 0xd104}, {0x501b, 0xb105},
47 {0x6017, 0x7106}, {0x7016, 0x6107}, {0x801f, 0xf108}, {0x9012, 0x2109},
48 {0xa01c, 0xc10a}, {0xb015, 0x510b}, {0xc01a, 0xa10c}, {0xd014, 0x410d},
49 {0xe013, 0x310e}, {0xf018, 0x810f}, {0x0111, 0x1110}, {0x1110, 0x0111},
50 /* 2 */
51 {0x2202, 0x2022}, {0x4201, 0x1024}, {0x620f, 0xf026}, {0x8209, 0x9028},
52 {0xa205, 0x502a}, {0xc20e, 0xe02c}, {0xe20c, 0xc02e}, {0x320d, 0xd023},
53 {0x1204, 0x4021}, {0x720b, 0xb027}, {0x520a, 0xa025}, {0xb207, 0x702b},
54 {0x9208, 0x8029}, {0xf206, 0x602f}, {0xd203, 0x302d}, {0x2022, 0x2202},
55 {0x4021, 0x1204}, {0x602f, 0xf206}, {0x8029, 0x9208}, {0xa025, 0x520a},
56 {0xc02e, 0xe20c}, {0xe02c, 0xc20e}, {0x302d, 0xd203}, {0x1024, 0x4201},
57 {0x702b, 0xb207}, {0x502a, 0xa205}, {0xb027, 0x720b}, {0x9028, 0x8209},
58 {0xf026, 0x620f}, {0xd023, 0x320d}, {0x0222, 0x2220}, {0x2220, 0x0222},
59 /* 3 */
60 {0x3303, 0x3033}, {0x6308, 0x8036}, {0x5301, 0x1035}, {0xc304, 0x403c},
61 {0xf30e, 0xe03f}, {0xa309, 0x903a}, {0x930a, 0xa039}, {0xb302, 0x203b},
62 {0x8306, 0x6038}, {0xd307, 0x703d}, {0xe30f, 0xf03e}, {0x730d, 0xd037},
63 {0x430c, 0xc034}, {0x1305, 0x5031}, {0x230b, 0xb032}, {0x3033, 0x3303},
64 {0x6038, 0x8306}, {0x5031, 0x1305}, {0xc034, 0x430c}, {0xf03e, 0xe30f},
65 {0xa039, 0x930a}, {0x903a, 0xa309}, {0xb032, 0x230b}, {0x8036, 0x6308},
66 {0xd037, 0x730d}, {0xe03f, 0xf30e}, {0x703d, 0xd307}, {0x403c, 0xc304},
67 {0x1035, 0x5301}, {0x203b, 0xb302}, {0x0333, 0x3330}, {0x3330, 0x0333},
68 /* 4 */
69 {0x4404, 0x4044}, {0x8402, 0x2048}, {0xc40d, 0xd04c}, {0x3401, 0x1043},
70 {0x740a, 0xa047}, {0xb40f, 0xf04b}, {0xf40b, 0xb04f}, {0x6409, 0x9046},
71 {0x2408, 0x8042}, {0xe405, 0x504e}, {0xa407, 0x704a}, {0x540e, 0xe045},
72 {0x1403, 0x3041}, {0xd40c, 0xc04d}, {0x9406, 0x6049}, {0x4044, 0x4404},
73 {0x8042, 0x2408}, {0xc04d, 0xd40c}, {0x3041, 0x1403}, {0x704a, 0xa407},
74 {0xb04f, 0xf40b}, {0xf04b, 0xb40f}, {0x6049, 0x9406}, {0x2048, 0x8402},
75 {0xe045, 0x540e}, {0xa047, 0x740a}, {0x504e, 0xe405}, {0x1043, 0x3401},
76 {0xd04c, 0xc40d}, {0x9046, 0x6409}, {0x0444, 0x4440}, {0x4440, 0x0444},
77 /* 5 */
78 {0x5505, 0x5055}, {0xa50b, 0xb05a}, {0xf503, 0x305f}, {0x750c, 0xc057},
79 {0x2501, 0x1052}, {0xd508, 0x805d}, {0x850d, 0xd058}, {0xe506, 0x605e},
80 {0xb50a, 0xa05b}, {0x4509, 0x9054}, {0x1502, 0x2051}, {0x9504, 0x4059},
81 {0xc507, 0x705c}, {0x350f, 0xf053}, {0x650e, 0xe056}, {0x5055, 0x5505},
82 {0xa05b, 0xb50a}, {0xf053, 0x350f}, {0x705c, 0xc507}, {0x2051, 0x1502},
83 {0xd058, 0x850d}, {0x805d, 0xd508}, {0xe056, 0x650e}, {0xb05a, 0xa50b},
84 {0x4059, 0x9504}, {0x1052, 0x2501}, {0x9054, 0x4509}, {0xc057, 0x750c},
85 {0x305f, 0xf503}, {0x605e, 0xe506}, {0x0555, 0x5550}, {0x5550, 0x0555},
86 /* 6 */
87 {0x6606, 0x6066}, {0xc603, 0x306c}, {0xa602, 0x206a}, {0xb608, 0x806b},
88 {0xd60f, 0xf06d}, {0x7601, 0x1067}, {0x1607, 0x7061}, {0x5604, 0x4065},
89 {0x360c, 0xc063}, {0x960e, 0xe069}, {0xf60d, 0xd06f}, {0xe609, 0x906e},
90 {0x860b, 0xb068}, {0x260a, 0xa062}, {0x4605, 0x5064}, {0x6066, 0x6606},
91 {0xc063, 0x360c}, {0xa062, 0x260a}, {0xb068, 0x860b}, {0xd06f, 0xf60d},
92 {0x7061, 0x1607}, {0x1067, 0x7601}, {0x5064, 0x4605}, {0x306c, 0xc603},
93 {0x906e, 0xe609}, {0xf06d, 0xd60f}, {0xe069, 0x960e}, {0x806b, 0xb608},
94 {0x206a, 0xa602}, {0x4065, 0x5604}, {0x0666, 0x6660}, {0x6660, 0x0666},
95 /* 7 */
96 {0x7707, 0x7077}, {0xe70a, 0xa07e}, {0x970c, 0xc079}, {0xf705, 0x507f},
97 {0x8704, 0x4078}, {0x1706, 0x6071}, {0x6701, 0x1076}, {0xd70b, 0xb07d},
98 {0xa70e, 0xe07a}, {0x3702, 0x2073}, {0x4708, 0x8074}, {0x2703, 0x3072},
99 {0x570f, 0xf075}, {0xc709, 0x907c}, {0xb70d, 0xd07b}, {0x7077, 0x7707},
100 {0xe07a, 0xa70e}, {0x907c, 0xc709}, {0xf075, 0x570f}, {0x8074, 0x4708},
101 {0x1076, 0x6701}, {0x6071, 0x1706}, {0xd07b, 0xb70d}, {0xa07e, 0xe70a},
102 {0x3072, 0x2703}, {0x4078, 0x8704}, {0x2073, 0x3702}, {0x507f, 0xf705},
103 {0xc079, 0x970c}, {0xb07d, 0xd70b}, {0x0777, 0x7770}, {0x7770, 0x0777},
104 /* 8 */
105 {0x8808, 0x8088}, {0x3804, 0x4083}, {0xb809, 0x908b}, {0x6802, 0x2086},
106 {0xe807, 0x708e}, {0x580d, 0xd085}, {0xd805, 0x508d}, {0xc801, 0x108c},
107 {0x4803, 0x3084}, {0xf80a, 0xa08f}, {0x780e, 0xe087}, {0xa80f, 0xf08a},
108 {0x2806, 0x6082}, {0x980b, 0xb089}, {0x180c, 0xc081}, {0x8088, 0x8808},
109 {0x3084, 0x4803}, {0xb089, 0x980b}, {0x6082, 0x2806}, {0xe087, 0x780e},
110 {0x508d, 0xd805}, {0xd085, 0x580d}, {0xc081, 0x180c}, {0x4083, 0x3804},
111 {0xf08a, 0xa80f}, {0x708e, 0xe807}, {0xa08f, 0xf80a}, {0x2086, 0x6802},
112 {0x908b, 0xb809}, {0x108c, 0xc801}, {0x0888, 0x8880}, {0x8880, 0x0888},
113 /* 9 */
114 {0x9909, 0x9099}, {0x190d, 0xd091}, {0x8907, 0x7098}, {0x290f, 0xf092},
115 {0xb90c, 0xc09b}, {0x390a, 0xa093}, {0xa903, 0x309a}, {0x490e, 0xe094},
116 {0xd901, 0x109d}, {0x5906, 0x6095}, {0xc90b, 0xb09c}, {0x6905, 0x5096},
117 {0xf902, 0x209f}, {0x7908, 0x8097}, {0xe904, 0x409e}, {0x9099, 0x9909},
118 {0x109d, 0xd901}, {0x8097, 0x7908}, {0x209f, 0xf902}, {0xb09c, 0xc90b},
119 {0x309a, 0xa903}, {0xa093, 0x390a}, {0x409e, 0xe904}, {0xd091, 0x190d},
120 {0x5096, 0x6905}, {0xc09b, 0xb90c}, {0x6095, 0x5906}, {0xf092, 0x290f},
121 {0x7098, 0x8907}, {0xe094, 0x490e}, {0x0999, 0x9990}, {0x9990, 0x0999},
122 /* A */
123 {0xaa0a, 0xa0aa}, {0x7a05, 0x50a7}, {0xda06, 0x60ad},
124 {0xea0b, 0xb0ae}, {0x4a02, 0x20a4}, {0x9a03, 0x30a9},
125 {0x3a09, 0x90a3}, {0xfa0c, 0xc0af}, {0x5a07, 0x70a5},
126 {0x8a01, 0x10a8}, {0x2a04, 0x40a2}, {0x1a08, 0x80a1},
127 {0xba0e, 0xe0ab}, {0x6a0d, 0xd0a6}, {0xca0f, 0xf0ac},
128 {0xa0aa, 0xaa0a}, {0x70a5, 0x5a07}, {0xd0a6, 0x6a0d},
129 {0xe0ab, 0xba0e}, {0x40a2, 0x2a04}, {0x90a3, 0x3a09},
130 {0x30a9, 0x9a03}, {0xf0ac, 0xca0f}, {0x50a7, 0x7a05},
131 {0x80a1, 0x1a08}, {0x20a4, 0x4a02}, {0x10a8, 0x8a01},
132 {0xb0ae, 0xea0b}, {0x60ad, 0xda06}, {0xc0af, 0xfa0c},
133 {0x0aaa, 0xaaa0}, {0xaaa0, 0x0aaa},
134 /* B */
135 {0xbb0b, 0xb0bb}, {0x5b0c, 0xc0b5}, {0xeb08, 0x80be},
136 {0xab06, 0x60ba}, {0x1b09, 0x90b1}, {0xfb04, 0x40bf},
137 {0x4b0f, 0xf0b4}, {0x7b03, 0x30b7}, {0xcb05, 0x50bc},
138 {0x2b0d, 0xd0b2}, {0x9b01, 0x10b9}, {0xdb02, 0x20bd},
139 {0x6b0a, 0xa0b6}, {0x8b0e, 0xe0b8}, {0x3b07, 0x70b3},
140 {0xb0bb, 0xbb0b}, {0x50bc, 0xcb05}, {0xe0b8, 0x8b0e},
141 {0xa0b6, 0x6b0a}, {0x10b9, 0x9b01}, {0xf0b4, 0x4b0f},
142 {0x40bf, 0xfb04}, {0x70b3, 0x3b07}, {0xc0b5, 0x5b0c},
143 {0x20bd, 0xdb02}, {0x90b1, 0x1b09}, {0xd0b2, 0x2b0d},
144 {0x60ba, 0xab06}, {0x80be, 0xeb08}, {0x30b7, 0x7b03},
145 {0x0bbb, 0xbbb0}, {0xbbb0, 0x0bbb},
146 /* C */
147 {0xcc0c, 0xc0cc}, {0xbc06, 0x60cb}, {0x7c04, 0x40c7},
148 {0x5c03, 0x30c5}, {0x9c0d, 0xd0c9}, {0xec02, 0x20ce},
149 {0x2c0e, 0xe0c2}, {0xac08, 0x80ca}, {0x6c0b, 0xb0c6},
150 {0x1c0f, 0xf0c1}, {0xdc09, 0x90cd}, {0xfc01, 0x10cf},
151 {0x3c05, 0x50c3}, {0x4c07, 0x70c4}, {0x8c0a, 0xa0c8},
152 {0xc0cc, 0xcc0c}, {0xb0c6, 0x6c0b}, {0x70c4, 0x4c07},
153 {0x50c3, 0x3c05}, {0x90cd, 0xdc09}, {0xe0c2, 0x2c0e},
154 {0x20ce, 0xec02}, {0xa0c8, 0x8c0a}, {0x60cb, 0xbc06},
155 {0x10cf, 0xfc01}, {0xd0c9, 0x9c0d}, {0xf0c1, 0x1c0f},
156 {0x30c5, 0x5c03}, {0x40c7, 0x7c04}, {0x80ca, 0xac08},
157 {0x0ccc, 0xccc0}, {0xccc0, 0x0ccc},
158 /* D */
159 {0xdd0d, 0xd0dd}, {0x9d0f, 0xf0d9}, {0x4d0a, 0xa0d4},
160 {0x1d0e, 0xe0d1}, {0xcd06, 0x60dc}, {0x8d05, 0x50d8},
161 {0x5d08, 0x80d5}, {0x2d07, 0x70d2}, {0xfd09, 0x90df},
162 {0xbd03, 0x30db}, {0x6d0c, 0xc0d6}, {0x3d0b, 0xb0d3},
163 {0xed01, 0x10de}, {0xad04, 0x40da}, {0x7d02, 0x20d7},
164 {0xd0dd, 0xdd0d}, {0x90df, 0xfd09}, {0x40da, 0xad04},
165 {0x10de, 0xed01}, {0xc0d6, 0x6d0c}, {0x80d5, 0x5d08},
166 {0x50d8, 0x8d05}, {0x20d7, 0x7d02}, {0xf0d9, 0x9d0f},
167 {0xb0d3, 0x3d0b}, {0x60dc, 0xcd06}, {0x30db, 0xbd03},
168 {0xe0d1, 0x1d0e}, {0xa0d4, 0x4d0a}, {0x70d2, 0x2d07},
169 {0x0ddd, 0xddd0}, {0xddd0, 0x0ddd},
170 /* E */
171 {0xee0e, 0xe0ee}, {0xfe07, 0x70ef}, {0x1e0b, 0xb0e1},
172 {0xde0a, 0xa0ed}, {0x3e08, 0x80e3}, {0x2e0c, 0xc0e2},
173 {0xce02, 0x20ec}, {0x9e05, 0x50e9}, {0x7e0f, 0xf0e7},
174 {0x6e04, 0x40e6}, {0x8e03, 0x30e8}, {0x4e06, 0x60e4},
175 {0xae0d, 0xd0ea}, {0xbe01, 0x10eb}, {0x5e09, 0x90e5},
176 {0xe0ee, 0xee0e}, {0xf0e7, 0x7e0f}, {0x10eb, 0xbe01},
177 {0xd0ea, 0xae0d}, {0x30e8, 0x8e03}, {0x20ec, 0xce02},
178 {0xc0e2, 0x2e0c}, {0x90e5, 0x5e09}, {0x70ef, 0xfe07},
179 {0x60e4, 0x4e06}, {0x80e3, 0x3e08}, {0x40e6, 0x6e04},
180 {0xa0ed, 0xde0a}, {0xb0e1, 0x1e0b}, {0x50e9, 0x9e05},
181 {0x0eee, 0xeee0}, {0xeee0, 0x0eee},
182 /* F */
183 {0xff0f, 0xf0ff}, {0xdf0e, 0xe0fd}, {0x2f05, 0x50f2},
184 {0x9f07, 0x70f9}, {0x6f03, 0x30f6}, {0x4f0b, 0xb0f4},
185 {0xbf04, 0x40fb}, {0x1f0a, 0xa0f1}, {0xef0d, 0xd0fe},
186 {0xcf08, 0x80fc}, {0x3f06, 0x60f3}, {0x8f0c, 0xc0f8},
187 {0x7f09, 0x90f7}, {0x5f02, 0x20f5}, {0xaf01, 0x10fa},
188 {0xf0ff, 0xff0f}, {0xd0fe, 0xef0d}, {0x20f5, 0x5f02},
189 {0x90f7, 0x7f09}, {0x60f3, 0x3f06}, {0x40fb, 0xbf04},
190 {0xb0f4, 0x4f0b}, {0x10fa, 0xaf01}, {0xe0fd, 0xdf0e},
191 {0xc0f8, 0x8f0c}, {0x30f6, 0x6f03}, {0x80fc, 0xcf08},
192 {0x70f9, 0x9f07}, {0x50f2, 0x2f05}, {0xa0f1, 0x1f0a},
193 {0x0fff, 0xfff0}, {0xfff0, 0x0fff},
194 /* */
195 {0x0111, 0x1110}, {0x0222, 0x2220}, {0x0333, 0x3330},
196 {0x0444, 0x4440}, {0x0555, 0x5550}, {0x0666, 0x6660},
197 {0x0777, 0x7770}, {0x0888, 0x8880}, {0x0999, 0x9990},
198 {0x0aaa, 0xaaa0}, {0x0bbb, 0xbbb0}, {0x0ccc, 0xccc0},
199 {0x0ddd, 0xddd0}, {0x0eee, 0xeee0}, {0x0fff, 0xfff0},
200 {0x0000, 0x0000},
201 {0x1110, 0x0111}, {0x2220, 0x0222}, {0x3330, 0x0333},
202 {0x4440, 0x0444}, {0x5550, 0x0555}, {0x6660, 0x0666},
203 {0x7770, 0x0777}, {0x8880, 0x0888}, {0x9990, 0x0999},
204 {0xaaa0, 0x0aaa}, {0xbbb0, 0x0bbb}, {0xccc0, 0x0ccc},
205 {0xddd0, 0x0ddd}, {0xeee0, 0x0eee}, {0xfff0, 0x0fff},
206 {0x0000, 0x0000},
207 {0x1011, 0x1101}, {0x2022, 0x2202}, {0x3033, 0x3303},
208 {0x4044, 0x4404}, {0x5055, 0x5505}, {0x6066, 0x6606},
209 {0x7077, 0x7707}, {0x8088, 0x8808}, {0x9099, 0x9909},
210 {0xa0aa, 0xaa0a}, {0xb0bb, 0xbb0b}, {0xc0cc, 0xcc0c},
211 {0xd0dd, 0xdd0d}, {0xe0ee, 0xee0e}, {0xf0ff, 0xff0f},
212 {0x0000, 0x0000},
213 {0x1000, 0x0001}, {0x2000, 0x0002}, {0x3000, 0x0003},
214 {0x4000, 0x0004}, {0x5000, 0x0005}, {0x6000, 0x0006},
215 {0x7000, 0x0007}, {0x8000, 0x0008}, {0x9000, 0x0009},
216 {0xa000, 0x000a}, {0xb000, 0x000b}, {0xc000, 0x000c},
217 {0xd000, 0x000d}, {0xe000, 0x000e}, {0xf000, 0x000f},
218 {0x0000, 0x0000},
219 {0x0100, 0x0010}, {0x0200, 0x0020}, {0x0300, 0x0030},
220 {0x0400, 0x0040}, {0x0500, 0x0050}, {0x0600, 0x0060},
221 {0x0700, 0x0070}, {0x0800, 0x0080}, {0x0900, 0x0090},
222 {0x0a00, 0x00a0}, {0x0b00, 0x00b0}, {0x0c00, 0x00c0},
223 {0x0d00, 0x00d0}, {0x0e00, 0x00e0}, {0x0f00, 0x00f0},
224 {0x0000, 0x0000},
225 {0x0010, 0x0100}, {0x0020, 0x0200}, {0x0030, 0x0300},
226 {0x0040, 0x0400}, {0x0050, 0x0500}, {0x0060, 0x0600},
227 {0x0070, 0x0700}, {0x0080, 0x0800}, {0x0090, 0x0900},
228 {0x00a0, 0x0a00}, {0x00b0, 0x0b00}, {0x00c0, 0x0c00},
229 {0x00d0, 0x0d00}, {0x00e0, 0x0e00}, {0x00f0, 0x0f00},
230 {0x0000, 0x0000},
231 {0x0001, 0x1000}, {0x0002, 0x2000}, {0x0003, 0x3000},
232 {0x0004, 0x4000}, {0x0005, 0x5000}, {0x0006, 0x6000},
233 {0x0007, 0x7000}, {0x0008, 0x8000}, {0x0009, 0x9000},
234 {0x000a, 0xa000}, {0x000b, 0xb000}, {0x000c, 0xc000},
235 {0x000d, 0xd000}, {0x000e, 0xe000}, {0x000f, 0xf000},
236 {0x0000, 0x0000},
237
238 {0xa854, 0x458a}, {0x0612, 0x2160}, {0x033c, 0xc330},
239 {0x06be, 0xeb60}, {0x0b06, 0x60b0}, {0x0c7c, 0xc7c0},
240 {0x0dd3, 0x3dd0}, {0x0dee, 0xeed0}, {0x0faa, 0xaaf0},
241 {0x12c7, 0x7c21}, {0x13ae, 0xea31}, {0x15ee, 0xee51},
242 {0x1676, 0x6761}, {0x1688, 0x8861}, {0x180e, 0xe081},
243 {0x18b4, 0x4b81},
244};
245
246const unsigned long long BL_CKEccFile::synd_exp_data [1024][2] =
247{
248 /* word 0, word 1*/
249 {0x0000000000000000, 0x0000000000000000},
250 /* Addr N Addr N+8 */
251 {0x0000000000000000, 0x0000000000000001},
252 {0x0000000000000000, 0x0000000000000010},
253 {0x0000000000000000, 0x0000000000000100},
254 {0x0000000000000000, 0x0000000000001000},
255 {0x0000000000000000, 0x0000000000010000},
256 {0x0000000000000000, 0x0000000000100000},
257 {0x0000000000000000, 0x0000000001000000},
258 {0x0000000000000000, 0x0000000010000000},
259 {0x0000000000000000, 0x0000000100000000},
260 {0x0000000000000000, 0x0000001000000000},
261 {0x0000000000000000, 0x0000010000000000},
262 {0x0000000000000000, 0x0000100000000000},
263 {0x0000000000000000, 0x0001000000000000},
264 {0x0000000000000000, 0x0010000000000000},
265 {0x0000000000000000, 0x0100000000000000},
266 {0x0000000000000000, 0x1000000000000000},
267 {0x0000000000000001, 0x0000000000000000},
268 {0x0000000000000010, 0x0000000000000000},
269 {0x0000000000000100, 0x0000000000000000},
270 {0x0000000000001000, 0x0000000000000000},
271 {0x0000000000010000, 0x0000000000000000},
272 {0x0000000000100000, 0x0000000000000000},
273 {0x0000000001000000, 0x0000000000000000},
274 {0x0000000010000000, 0x0000000000000000},
275 {0x0000000100000000, 0x0000000000000000},
276 {0x0000001000000000, 0x0000000000000000},
277 {0x0000010000000000, 0x0000000000000000},
278 {0x0000100000000000, 0x0000000000000000},
279 {0x0001000000000000, 0x0000000000000000},
280 {0x0010000000000000, 0x0000000000000000},
281 {0x0100000000000000, 0x0000000000000000},
282 {0x1000000000000000, 0x0000000000000000},
283 {0x0000000000000000, 0x0000000000000002},
284 {0x0000000000000000, 0x0000000000000020},
285 {0x0000000000000000, 0x0000000000000200},
286 {0x0000000000000000, 0x0000000000002000},
287 {0x0000000000000000, 0x0000000000020000},
288 {0x0000000000000000, 0x0000000000200000},
289 {0x0000000000000000, 0x0000000002000000},
290 {0x0000000000000000, 0x0000000020000000},
291 {0x0000000000000000, 0x0000000200000000},
292 {0x0000000000000000, 0x0000002000000000},
293 {0x0000000000000000, 0x0000020000000000},
294 {0x0000000000000000, 0x0000200000000000},
295 {0x0000000000000000, 0x0002000000000000},
296 {0x0000000000000000, 0x0020000000000000},
297 {0x0000000000000000, 0x0200000000000000},
298 {0x0000000000000000, 0x2000000000000000},
299 {0x0000000000000002, 0x0000000000000000},
300 {0x0000000000000020, 0x0000000000000000},
301 {0x0000000000000200, 0x0000000000000000},
302 {0x0000000000002000, 0x0000000000000000},
303 {0x0000000000020000, 0x0000000000000000},
304 {0x0000000000200000, 0x0000000000000000},
305 {0x0000000002000000, 0x0000000000000000},
306 {0x0000000020000000, 0x0000000000000000},
307 {0x0000000200000000, 0x0000000000000000},
308 {0x0000002000000000, 0x0000000000000000},
309 {0x0000020000000000, 0x0000000000000000},
310 {0x0000200000000000, 0x0000000000000000},
311 {0x0002000000000000, 0x0000000000000000},
312 {0x0020000000000000, 0x0000000000000000},
313 {0x0200000000000000, 0x0000000000000000},
314 {0x2000000000000000, 0x0000000000000000},
315 {0x0000000000000000, 0x0000000000000003},
316 {0x0000000000000000, 0x0000000000000030},
317 {0x0000000000000000, 0x0000000000000300},
318 {0x0000000000000000, 0x0000000000003000},
319 {0x0000000000000000, 0x0000000000030000},
320 {0x0000000000000000, 0x0000000000300000},
321 {0x0000000000000000, 0x0000000003000000},
322 {0x0000000000000000, 0x0000000030000000},
323 {0x0000000000000000, 0x0000000300000000},
324 {0x0000000000000000, 0x0000003000000000},
325 {0x0000000000000000, 0x0000030000000000},
326 {0x0000000000000000, 0x0000300000000000},
327 {0x0000000000000000, 0x0003000000000000},
328 {0x0000000000000000, 0x0030000000000000},
329 {0x0000000000000000, 0x0300000000000000},
330 {0x0000000000000000, 0x3000000000000000},
331 {0x0000000000000003, 0x0000000000000000},
332 {0x0000000000000030, 0x0000000000000000},
333 {0x0000000000000300, 0x0000000000000000},
334 {0x0000000000003000, 0x0000000000000000},
335 {0x0000000000030000, 0x0000000000000000},
336 {0x0000000000300000, 0x0000000000000000},
337 {0x0000000003000000, 0x0000000000000000},
338 {0x0000000030000000, 0x0000000000000000},
339 {0x0000000300000000, 0x0000000000000000},
340 {0x0000003000000000, 0x0000000000000000},
341 {0x0000030000000000, 0x0000000000000000},
342 {0x0000300000000000, 0x0000000000000000},
343 {0x0003000000000000, 0x0000000000000000},
344 {0x0030000000000000, 0x0000000000000000},
345 {0x0300000000000000, 0x0000000000000000},
346 {0x3000000000000000, 0x0000000000000000},
347 {0x0000000000000000, 0x0000000000000004},
348 {0x0000000000000000, 0x0000000000000040},
349 {0x0000000000000000, 0x0000000000000400},
350 {0x0000000000000000, 0x0000000000004000},
351 {0x0000000000000000, 0x0000000000040000},
352 {0x0000000000000000, 0x0000000000400000},
353 {0x0000000000000000, 0x0000000004000000},
354 {0x0000000000000000, 0x0000000040000000},
355 {0x0000000000000000, 0x0000000400000000},
356 {0x0000000000000000, 0x0000004000000000},
357 {0x0000000000000000, 0x0000040000000000},
358 {0x0000000000000000, 0x0000400000000000},
359 {0x0000000000000000, 0x0004000000000000},
360 {0x0000000000000000, 0x0040000000000000},
361 {0x0000000000000000, 0x0400000000000000},
362 {0x0000000000000000, 0x4000000000000000},
363 {0x0000000000000004, 0x0000000000000000},
364 {0x0000000000000040, 0x0000000000000000},
365 {0x0000000000000400, 0x0000000000000000},
366 {0x0000000000004000, 0x0000000000000000},
367 {0x0000000000040000, 0x0000000000000000},
368 {0x0000000000400000, 0x0000000000000000},
369 {0x0000000004000000, 0x0000000000000000},
370 {0x0000000040000000, 0x0000000000000000},
371 {0x0000000400000000, 0x0000000000000000},
372 {0x0000004000000000, 0x0000000000000000},
373 {0x0000040000000000, 0x0000000000000000},
374 {0x0000400000000000, 0x0000000000000000},
375 {0x0004000000000000, 0x0000000000000000},
376 {0x0040000000000000, 0x0000000000000000},
377 {0x0400000000000000, 0x0000000000000000},
378 {0x4000000000000000, 0x0000000000000000},
379 {0x0000000000000000, 0x0000000000000005},
380 {0x0000000000000000, 0x0000000000000050},
381 {0x0000000000000000, 0x0000000000000500},
382 {0x0000000000000000, 0x0000000000005000},
383 {0x0000000000000000, 0x0000000000050000},
384 {0x0000000000000000, 0x0000000000500000},
385 {0x0000000000000000, 0x0000000005000000},
386 {0x0000000000000000, 0x0000000050000000},
387 {0x0000000000000000, 0x0000000500000000},
388 {0x0000000000000000, 0x0000005000000000},
389 {0x0000000000000000, 0x0000050000000000},
390 {0x0000000000000000, 0x0000500000000000},
391 {0x0000000000000000, 0x0005000000000000},
392 {0x0000000000000000, 0x0050000000000000},
393 {0x0000000000000000, 0x0500000000000000},
394 {0x0000000000000000, 0x5000000000000000},
395 {0x0000000000000005, 0x0000000000000000},
396 {0x0000000000000050, 0x0000000000000000},
397 {0x0000000000000500, 0x0000000000000000},
398 {0x0000000000005000, 0x0000000000000000},
399 {0x0000000000050000, 0x0000000000000000},
400 {0x0000000000500000, 0x0000000000000000},
401 {0x0000000005000000, 0x0000000000000000},
402 {0x0000000050000000, 0x0000000000000000},
403 {0x0000000500000000, 0x0000000000000000},
404 {0x0000005000000000, 0x0000000000000000},
405 {0x0000050000000000, 0x0000000000000000},
406 {0x0000500000000000, 0x0000000000000000},
407 {0x0005000000000000, 0x0000000000000000},
408 {0x0050000000000000, 0x0000000000000000},
409 {0x0500000000000000, 0x0000000000000000},
410 {0x5000000000000000, 0x0000000000000000},
411 {0x0000000000000000, 0x0000000000000006},
412 {0x0000000000000000, 0x0000000000000060},
413 {0x0000000000000000, 0x0000000000000600},
414 {0x0000000000000000, 0x0000000000006000},
415 {0x0000000000000000, 0x0000000000060000},
416 {0x0000000000000000, 0x0000000000600000},
417 {0x0000000000000000, 0x0000000006000000},
418 {0x0000000000000000, 0x0000000060000000},
419 {0x0000000000000000, 0x0000000600000000},
420 {0x0000000000000000, 0x0000006000000000},
421 {0x0000000000000000, 0x0000060000000000},
422 {0x0000000000000000, 0x0000600000000000},
423 {0x0000000000000000, 0x0006000000000000},
424 {0x0000000000000000, 0x0060000000000000},
425 {0x0000000000000000, 0x0600000000000000},
426 {0x0000000000000000, 0x6000000000000000},
427 {0x0000000000000006, 0x0000000000000000},
428 {0x0000000000000060, 0x0000000000000000},
429 {0x0000000000000600, 0x0000000000000000},
430 {0x0000000000006000, 0x0000000000000000},
431 {0x0000000000060000, 0x0000000000000000},
432 {0x0000000000600000, 0x0000000000000000},
433 {0x0000000006000000, 0x0000000000000000},
434 {0x0000000060000000, 0x0000000000000000},
435 {0x0000000600000000, 0x0000000000000000},
436 {0x0000006000000000, 0x0000000000000000},
437 {0x0000060000000000, 0x0000000000000000},
438 {0x0000600000000000, 0x0000000000000000},
439 {0x0006000000000000, 0x0000000000000000},
440 {0x0060000000000000, 0x0000000000000000},
441 {0x0600000000000000, 0x0000000000000000},
442 {0x6000000000000000, 0x0000000000000000},
443 {0x0000000000000000, 0x0000000000000007},
444 {0x0000000000000000, 0x0000000000000070},
445 {0x0000000000000000, 0x0000000000000700},
446 {0x0000000000000000, 0x0000000000007000},
447 {0x0000000000000000, 0x0000000000070000},
448 {0x0000000000000000, 0x0000000000700000},
449 {0x0000000000000000, 0x0000000007000000},
450 {0x0000000000000000, 0x0000000070000000},
451 {0x0000000000000000, 0x0000000700000000},
452 {0x0000000000000000, 0x0000007000000000},
453 {0x0000000000000000, 0x0000070000000000},
454 {0x0000000000000000, 0x0000700000000000},
455 {0x0000000000000000, 0x0007000000000000},
456 {0x0000000000000000, 0x0070000000000000},
457 {0x0000000000000000, 0x0700000000000000},
458 {0x0000000000000000, 0x7000000000000000},
459 {0x0000000000000007, 0x0000000000000000},
460 {0x0000000000000070, 0x0000000000000000},
461 {0x0000000000000700, 0x0000000000000000},
462 {0x0000000000007000, 0x0000000000000000},
463 {0x0000000000070000, 0x0000000000000000},
464 {0x0000000000700000, 0x0000000000000000},
465 {0x0000000007000000, 0x0000000000000000},
466 {0x0000000070000000, 0x0000000000000000},
467 {0x0000000700000000, 0x0000000000000000},
468 {0x0000007000000000, 0x0000000000000000},
469 {0x0000070000000000, 0x0000000000000000},
470 {0x0000700000000000, 0x0000000000000000},
471 {0x0007000000000000, 0x0000000000000000},
472 {0x0070000000000000, 0x0000000000000000},
473 {0x0700000000000000, 0x0000000000000000},
474 {0x7000000000000000, 0x0000000000000000},
475 {0x0000000000000000, 0x0000000000000008},
476 {0x0000000000000000, 0x0000000000000080},
477 {0x0000000000000000, 0x0000000000000800},
478 {0x0000000000000000, 0x0000000000008000},
479 {0x0000000000000000, 0x0000000000080000},
480 {0x0000000000000000, 0x0000000000800000},
481 {0x0000000000000000, 0x0000000008000000},
482 {0x0000000000000000, 0x0000000080000000},
483 {0x0000000000000000, 0x0000000800000000},
484 {0x0000000000000000, 0x0000008000000000},
485 {0x0000000000000000, 0x0000080000000000},
486 {0x0000000000000000, 0x0000800000000000},
487 {0x0000000000000000, 0x0008000000000000},
488 {0x0000000000000000, 0x0080000000000000},
489 {0x0000000000000000, 0x0800000000000000},
490 {0x0000000000000000, 0x8000000000000000},
491 {0x0000000000000008, 0x0000000000000000},
492 {0x0000000000000080, 0x0000000000000000},
493 {0x0000000000000800, 0x0000000000000000},
494 {0x0000000000008000, 0x0000000000000000},
495 {0x0000000000080000, 0x0000000000000000},
496 {0x0000000000800000, 0x0000000000000000},
497 {0x0000000008000000, 0x0000000000000000},
498 {0x0000000080000000, 0x0000000000000000},
499 {0x0000000800000000, 0x0000000000000000},
500 {0x0000008000000000, 0x0000000000000000},
501 {0x0000080000000000, 0x0000000000000000},
502 {0x0000800000000000, 0x0000000000000000},
503 {0x0008000000000000, 0x0000000000000000},
504 {0x0080000000000000, 0x0000000000000000},
505 {0x0800000000000000, 0x0000000000000000},
506 {0x8000000000000000, 0x0000000000000000},
507 {0x0000000000000000, 0x0000000000000009},
508 {0x0000000000000000, 0x0000000000000090},
509 {0x0000000000000000, 0x0000000000000900},
510 {0x0000000000000000, 0x0000000000009000},
511 {0x0000000000000000, 0x0000000000090000},
512 {0x0000000000000000, 0x0000000000900000},
513 {0x0000000000000000, 0x0000000009000000},
514 {0x0000000000000000, 0x0000000090000000},
515 {0x0000000000000000, 0x0000000900000000},
516 {0x0000000000000000, 0x0000009000000000},
517 {0x0000000000000000, 0x0000090000000000},
518 {0x0000000000000000, 0x0000900000000000},
519 {0x0000000000000000, 0x0009000000000000},
520 {0x0000000000000000, 0x0090000000000000},
521 {0x0000000000000000, 0x0900000000000000},
522 {0x0000000000000000, 0x9000000000000000},
523 {0x0000000000000009, 0x0000000000000000},
524 {0x0000000000000090, 0x0000000000000000},
525 {0x0000000000000900, 0x0000000000000000},
526 {0x0000000000009000, 0x0000000000000000},
527 {0x0000000000090000, 0x0000000000000000},
528 {0x0000000000900000, 0x0000000000000000},
529 {0x0000000009000000, 0x0000000000000000},
530 {0x0000000090000000, 0x0000000000000000},
531 {0x0000000900000000, 0x0000000000000000},
532 {0x0000009000000000, 0x0000000000000000},
533 {0x0000090000000000, 0x0000000000000000},
534 {0x0000900000000000, 0x0000000000000000},
535 {0x0009000000000000, 0x0000000000000000},
536 {0x0090000000000000, 0x0000000000000000},
537 {0x0900000000000000, 0x0000000000000000},
538 {0x9000000000000000, 0x0000000000000000},
539 {0x0000000000000000, 0x000000000000000a},
540 {0x0000000000000000, 0x00000000000000a0},
541 {0x0000000000000000, 0x0000000000000a00},
542 {0x0000000000000000, 0x000000000000a000},
543 {0x0000000000000000, 0x00000000000a0000},
544 {0x0000000000000000, 0x0000000000a00000},
545 {0x0000000000000000, 0x000000000a000000},
546 {0x0000000000000000, 0x00000000a0000000},
547 {0x0000000000000000, 0x0000000a00000000},
548 {0x0000000000000000, 0x000000a000000000},
549 {0x0000000000000000, 0x00000a0000000000},
550 {0x0000000000000000, 0x0000a00000000000},
551 {0x0000000000000000, 0x000a000000000000},
552 {0x0000000000000000, 0x00a0000000000000},
553 {0x0000000000000000, 0x0a00000000000000},
554 {0x0000000000000000, 0xa000000000000000},
555 {0x000000000000000a, 0x0000000000000000},
556 {0x00000000000000a0, 0x0000000000000000},
557 {0x0000000000000a00, 0x0000000000000000},
558 {0x000000000000a000, 0x0000000000000000},
559 {0x00000000000a0000, 0x0000000000000000},
560 {0x0000000000a00000, 0x0000000000000000},
561 {0x000000000a000000, 0x0000000000000000},
562 {0x00000000a0000000, 0x0000000000000000},
563 {0x0000000a00000000, 0x0000000000000000},
564 {0x000000a000000000, 0x0000000000000000},
565 {0x00000a0000000000, 0x0000000000000000},
566 {0x0000a00000000000, 0x0000000000000000},
567 {0x000a000000000000, 0x0000000000000000},
568 {0x00a0000000000000, 0x0000000000000000},
569 {0x0a00000000000000, 0x0000000000000000},
570 {0xa000000000000000, 0x0000000000000000},
571 {0x0000000000000000, 0x000000000000000b},
572 {0x0000000000000000, 0x00000000000000b0},
573 {0x0000000000000000, 0x0000000000000b00},
574 {0x0000000000000000, 0x000000000000b000},
575 {0x0000000000000000, 0x00000000000b0000},
576 {0x0000000000000000, 0x0000000000b00000},
577 {0x0000000000000000, 0x000000000b000000},
578 {0x0000000000000000, 0x00000000b0000000},
579 {0x0000000000000000, 0x0000000b00000000},
580 {0x0000000000000000, 0x000000b000000000},
581 {0x0000000000000000, 0x00000b0000000000},
582 {0x0000000000000000, 0x0000b00000000000},
583 {0x0000000000000000, 0x000b000000000000},
584 {0x0000000000000000, 0x00b0000000000000},
585 {0x0000000000000000, 0x0b00000000000000},
586 {0x0000000000000000, 0xb000000000000000},
587 {0x000000000000000b, 0x0000000000000000},
588 {0x00000000000000b0, 0x0000000000000000},
589 {0x0000000000000b00, 0x0000000000000000},
590 {0x000000000000b000, 0x0000000000000000},
591 {0x00000000000b0000, 0x0000000000000000},
592 {0x0000000000b00000, 0x0000000000000000},
593 {0x000000000b000000, 0x0000000000000000},
594 {0x00000000b0000000, 0x0000000000000000},
595 {0x0000000b00000000, 0x0000000000000000},
596 {0x000000b000000000, 0x0000000000000000},
597 {0x00000b0000000000, 0x0000000000000000},
598 {0x0000b00000000000, 0x0000000000000000},
599 {0x000b000000000000, 0x0000000000000000},
600 {0x00b0000000000000, 0x0000000000000000},
601 {0x0b00000000000000, 0x0000000000000000},
602 {0xb000000000000000, 0x0000000000000000},
603 {0x0000000000000000, 0x000000000000000c},
604 {0x0000000000000000, 0x00000000000000c0},
605 {0x0000000000000000, 0x0000000000000c00},
606 {0x0000000000000000, 0x000000000000c000},
607 {0x0000000000000000, 0x00000000000c0000},
608 {0x0000000000000000, 0x0000000000c00000},
609 {0x0000000000000000, 0x000000000c000000},
610 {0x0000000000000000, 0x00000000c0000000},
611 {0x0000000000000000, 0x0000000c00000000},
612 {0x0000000000000000, 0x000000c000000000},
613 {0x0000000000000000, 0x00000c0000000000},
614 {0x0000000000000000, 0x0000c00000000000},
615 {0x0000000000000000, 0x000c000000000000},
616 {0x0000000000000000, 0x00c0000000000000},
617 {0x0000000000000000, 0x0c00000000000000},
618 {0x0000000000000000, 0xc000000000000000},
619 {0x000000000000000c, 0x0000000000000000},
620 {0x00000000000000c0, 0x0000000000000000},
621 {0x0000000000000c00, 0x0000000000000000},
622 {0x000000000000c000, 0x0000000000000000},
623 {0x00000000000c0000, 0x0000000000000000},
624 {0x0000000000c00000, 0x0000000000000000},
625 {0x000000000c000000, 0x0000000000000000},
626 {0x00000000c0000000, 0x0000000000000000},
627 {0x0000000c00000000, 0x0000000000000000},
628 {0x000000c000000000, 0x0000000000000000},
629 {0x00000c0000000000, 0x0000000000000000},
630 {0x0000c00000000000, 0x0000000000000000},
631 {0x000c000000000000, 0x0000000000000000},
632 {0x00c0000000000000, 0x0000000000000000},
633 {0x0c00000000000000, 0x0000000000000000},
634 {0xc000000000000000, 0x0000000000000000},
635 {0x0000000000000000, 0x000000000000000d},
636 {0x0000000000000000, 0x00000000000000d0},
637 {0x0000000000000000, 0x0000000000000d00},
638 {0x0000000000000000, 0x000000000000d000},
639 {0x0000000000000000, 0x00000000000d0000},
640 {0x0000000000000000, 0x0000000000d00000},
641 {0x0000000000000000, 0x000000000d000000},
642 {0x0000000000000000, 0x00000000d0000000},
643 {0x0000000000000000, 0x0000000d00000000},
644 {0x0000000000000000, 0x000000d000000000},
645 {0x0000000000000000, 0x00000d0000000000},
646 {0x0000000000000000, 0x0000d00000000000},
647 {0x0000000000000000, 0x000d000000000000},
648 {0x0000000000000000, 0x00d0000000000000},
649 {0x0000000000000000, 0x0d00000000000000},
650 {0x0000000000000000, 0xd000000000000000},
651 {0x000000000000000d, 0x0000000000000000},
652 {0x00000000000000d0, 0x0000000000000000},
653 {0x0000000000000d00, 0x0000000000000000},
654 {0x000000000000d000, 0x0000000000000000},
655 {0x00000000000d0000, 0x0000000000000000},
656 {0x0000000000d00000, 0x0000000000000000},
657 {0x000000000d000000, 0x0000000000000000},
658 {0x00000000d0000000, 0x0000000000000000},
659 {0x0000000d00000000, 0x0000000000000000},
660 {0x000000d000000000, 0x0000000000000000},
661 {0x00000d0000000000, 0x0000000000000000},
662 {0x0000d00000000000, 0x0000000000000000},
663 {0x000d000000000000, 0x0000000000000000},
664 {0x00d0000000000000, 0x0000000000000000},
665 {0x0d00000000000000, 0x0000000000000000},
666 {0xd000000000000000, 0x0000000000000000},
667 {0x0000000000000000, 0x000000000000000e},
668 {0x0000000000000000, 0x00000000000000e0},
669 {0x0000000000000000, 0x0000000000000e00},
670 {0x0000000000000000, 0x000000000000e000},
671 {0x0000000000000000, 0x00000000000e0000},
672 {0x0000000000000000, 0x0000000000e00000},
673 {0x0000000000000000, 0x000000000e000000},
674 {0x0000000000000000, 0x00000000e0000000},
675 {0x0000000000000000, 0x0000000e00000000},
676 {0x0000000000000000, 0x000000e000000000},
677 {0x0000000000000000, 0x00000e0000000000},
678 {0x0000000000000000, 0x0000e00000000000},
679 {0x0000000000000000, 0x000e000000000000},
680 {0x0000000000000000, 0x00e0000000000000},
681 {0x0000000000000000, 0x0e00000000000000},
682 {0x0000000000000000, 0xe000000000000000},
683 {0x000000000000000e, 0x0000000000000000},
684 {0x00000000000000e0, 0x0000000000000000},
685 {0x0000000000000e00, 0x0000000000000000},
686 {0x000000000000e000, 0x0000000000000000},
687 {0x00000000000e0000, 0x0000000000000000},
688 {0x0000000000e00000, 0x0000000000000000},
689 {0x000000000e000000, 0x0000000000000000},
690 {0x00000000e0000000, 0x0000000000000000},
691 {0x0000000e00000000, 0x0000000000000000},
692 {0x000000e000000000, 0x0000000000000000},
693 {0x00000e0000000000, 0x0000000000000000},
694 {0x0000e00000000000, 0x0000000000000000},
695 {0x000e000000000000, 0x0000000000000000},
696 {0x00e0000000000000, 0x0000000000000000},
697 {0x0e00000000000000, 0x0000000000000000},
698 {0xe000000000000000, 0x0000000000000000},
699 {0x0000000000000000, 0x000000000000000f},
700 {0x0000000000000000, 0x00000000000000f0},
701 {0x0000000000000000, 0x0000000000000f00},
702 {0x0000000000000000, 0x000000000000f000},
703 {0x0000000000000000, 0x00000000000f0000},
704 {0x0000000000000000, 0x0000000000f00000},
705 {0x0000000000000000, 0x000000000f000000},
706 {0x0000000000000000, 0x00000000f0000000},
707 {0x0000000000000000, 0x0000000f00000000},
708 {0x0000000000000000, 0x000000f000000000},
709 {0x0000000000000000, 0x00000f0000000000},
710 {0x0000000000000000, 0x0000f00000000000},
711 {0x0000000000000000, 0x000f000000000000},
712 {0x0000000000000000, 0x00f0000000000000},
713 {0x0000000000000000, 0x0f00000000000000},
714 {0x0000000000000000, 0xf000000000000000},
715 {0x000000000000000f, 0x0000000000000000},
716 {0x00000000000000f0, 0x0000000000000000},
717 {0x0000000000000f00, 0x0000000000000000},
718 {0x000000000000f000, 0x0000000000000000},
719 {0x00000000000f0000, 0x0000000000000000},
720 {0x0000000000f00000, 0x0000000000000000},
721 {0x000000000f000000, 0x0000000000000000},
722 {0x00000000f0000000, 0x0000000000000000},
723 {0x0000000f00000000, 0x0000000000000000},
724 {0x000000f000000000, 0x0000000000000000},
725 {0x00000f0000000000, 0x0000000000000000},
726 {0x0000f00000000000, 0x0000000000000000},
727 {0x000f000000000000, 0x0000000000000000},
728 {0x00f0000000000000, 0x0000000000000000},
729 {0x0f00000000000000, 0x0000000000000000},
730 {0xf000000000000000, 0x0000000000000000},
731
732 {0x0100000000000000, 0x0000000000000000},
733 {0x0200000000000000, 0x0000000000000000},
734 {0x0300000000000000, 0x0000000000000000},
735 {0x0400000000000000, 0x0000000000000000},
736 {0x0500000000000000, 0x0000000000000000},
737 {0x0600000000000000, 0x0000000000000000},
738 {0x0700000000000000, 0x0000000000000000},
739 {0x0800000000000000, 0x0000000000000000},
740 {0x0900000000000000, 0x0000000000000000},
741 {0x0a00000000000000, 0x0000000000000000},
742 {0x0b00000000000000, 0x0000000000000000},
743 {0x0c00000000000000, 0x0000000000000000},
744 {0x0d00000000000000, 0x0000000000000000},
745 {0x0e00000000000000, 0x0000000000000000},
746 {0x0f00000000000000, 0x0000000000000000},
747 {0x0000000000000000, 0x0000000000000000},
748
749 {0x1000000000000000, 0x0000000000000000},
750 {0x2000000000000000, 0x0000000000000000},
751 {0x3000000000000000, 0x0000000000000000},
752 {0x4000000000000000, 0x0000000000000000},
753 {0x5000000000000000, 0x0000000000000000},
754 {0x6000000000000000, 0x0000000000000000},
755 {0x7000000000000000, 0x0000000000000000},
756 {0x8000000000000000, 0x0000000000000000},
757 {0x9000000000000000, 0x0000000000000000},
758 {0xa000000000000000, 0x0000000000000000},
759 {0xb000000000000000, 0x0000000000000000},
760 {0xc000000000000000, 0x0000000000000000},
761 {0xd000000000000000, 0x0000000000000000},
762 {0xe000000000000000, 0x0000000000000000},
763 {0xf000000000000000, 0x0000000000000000},
764 {0x0000000000000000, 0x0000000000000000},
765
766 {0x0000000000000000, 0x1000000000000000},
767 {0x0000000000000000, 0x2000000000000000},
768 {0x0000000000000000, 0x3000000000000000},
769 {0x0000000000000000, 0x4000000000000000},
770 {0x0000000000000000, 0x5000000000000000},
771 {0x0000000000000000, 0x6000000000000000},
772 {0x0000000000000000, 0x7000000000000000},
773 {0x0000000000000000, 0x8000000000000000},
774 {0x0000000000000000, 0x9000000000000000},
775 {0x0000000000000000, 0xa000000000000000},
776 {0x0000000000000000, 0xb000000000000000},
777 {0x0000000000000000, 0xc000000000000000},
778 {0x0000000000000000, 0xd000000000000000},
779 {0x0000000000000000, 0xe000000000000000},
780 {0x0000000000000000, 0xf000000000000000},
781 {0x0000000000000000, 0x0000000000000000},
782
783 {0x0000000000000000, 0x0000000000000000},
784 {0x0000000000000000, 0x0000000000000000},
785 {0x0000000000000000, 0x0000000000000000},
786 {0x0000000000000000, 0x0000000000000000},
787 {0x0000000000000000, 0x0000000000000000},
788 {0x0000000000000000, 0x0000000000000000},
789 {0x0000000000000000, 0x0000000000000000},
790 {0x0000000000000000, 0x0000000000000000},
791 {0x0000000000000000, 0x0000000000000000},
792 {0x0000000000000000, 0x0000000000000000},
793 {0x0000000000000000, 0x0000000000000000},
794 {0x0000000000000000, 0x0000000000000000},
795 {0x0000000000000000, 0x0000000000000000},
796 {0x0000000000000000, 0x0000000000000000},
797 {0x0000000000000000, 0x0000000000000000},
798 {0x0000000000000000, 0x0000000000000000},
799
800 {0x0000000000000000, 0x0000000000000000},
801 {0x0000000000000000, 0x0000000000000000},
802 {0x0000000000000000, 0x0000000000000000},
803 {0x0000000000000000, 0x0000000000000000},
804 {0x0000000000000000, 0x0000000000000000},
805 {0x0000000000000000, 0x0000000000000000},
806 {0x0000000000000000, 0x0000000000000000},
807 {0x0000000000000000, 0x0000000000000000},
808 {0x0000000000000000, 0x0000000000000000},
809 {0x0000000000000000, 0x0000000000000000},
810 {0x0000000000000000, 0x0000000000000000},
811 {0x0000000000000000, 0x0000000000000000},
812 {0x0000000000000000, 0x0000000000000000},
813 {0x0000000000000000, 0x0000000000000000},
814 {0x0000000000000000, 0x0000000000000000},
815 {0x0000000000000000, 0x0000000000000000},
816
817 {0x0000000000000000, 0x0000000000000000},
818 {0x0000000000000000, 0x0000000000000000},
819 {0x0000000000000000, 0x0000000000000000},
820 {0x0000000000000000, 0x0000000000000000},
821 {0x0000000000000000, 0x0000000000000000},
822 {0x0000000000000000, 0x0000000000000000},
823 {0x0000000000000000, 0x0000000000000000},
824 {0x0000000000000000, 0x0000000000000000},
825 {0x0000000000000000, 0x0000000000000000},
826 {0x0000000000000000, 0x0000000000000000},
827 {0x0000000000000000, 0x0000000000000000},
828 {0x0000000000000000, 0x0000000000000000},
829 {0x0000000000000000, 0x0000000000000000},
830 {0x0000000000000000, 0x0000000000000000},
831 {0x0000000000000000, 0x0000000000000000},
832 {0x0000000000000000, 0x0000000000000000},
833
834 {0x0000000000000000, 0x0000000000000000},
835 {0x0000000000000000, 0x0000000000000000},
836 {0x0000000000000000, 0x0000000000000000},
837 {0x0000000000000000, 0x0000000000000000},
838 {0x0000000000000000, 0x0000000000000000},
839 {0x0000000000000000, 0x0000000000000000},
840 {0x0000000000000000, 0x0000000000000000},
841 {0x0000000000000000, 0x0000000000000000},
842 {0x0000000000000000, 0x0000000000000000},
843 {0x0000000000000000, 0x0000000000000000},
844 {0x0000000000000000, 0x0000000000000000},
845 {0x0000000000000000, 0x0000000000000000},
846 {0x0000000000000000, 0x0000000000000000},
847 {0x0000000000000000, 0x0000000000000000},
848 {0x0000000000000000, 0x0000000000000000},
849 {0x0000000000000000, 0x0000000000000000},
850
851 {0x0000000000000000, 0x0000000000000000},
852 {0x0000000000000000, 0x0000000000000000},
853 {0x0000000000000000, 0x0000000000000000},
854 {0x0000000000000000, 0x0000000000000000},
855 {0x0000000000000000, 0x0000000000000000},
856 {0x0000000000000000, 0x0000000000000000},
857 {0x0000000000000000, 0x0000000000000000},
858 {0x0000000000000000, 0x0000000000000000},
859 {0x0000000000000000, 0x0000000000000000},
860 {0x0000000000000000, 0x0000000000000000},
861 {0x0000000000000000, 0x0000000000000000},
862 {0x0000000000000000, 0x0000000000000000},
863 {0x0000000000000000, 0x0000000000000000},
864 {0x0000000000000000, 0x0000000000000000},
865 {0x0000000000000000, 0x0000000000000000},
866 {0x0000000000000000, 0x0000000000000000},
867};
868
869const unsigned char BL_CKEccFile::galois[16][16] =
870{
871 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
872 /* 0 */ { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, },
873 /* 1 */ { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf, },
874 /* 2 */ { 0x0, 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0x3, 0x1, 0x7, 0x5, 0xb, 0x9, 0xf, 0xd, },
875 /* 3 */ { 0x0, 0x3, 0x6, 0x5, 0xc, 0xf, 0xa, 0x9, 0xb, 0x8, 0xd, 0xe, 0x7, 0x4, 0x1, 0x2, },
876 /* 4 */ { 0x0, 0x4, 0x8, 0xc, 0x3, 0x7, 0xb, 0xf, 0x6, 0x2, 0xe, 0xa, 0x5, 0x1, 0xd, 0x9, },
877 /* 5 */ { 0x0, 0x5, 0xa, 0xf, 0x7, 0x2, 0xd, 0x8, 0xe, 0xb, 0x4, 0x1, 0x9, 0xc, 0x3, 0x6, },
878 /* 6 */ { 0x0, 0x6, 0xc, 0xa, 0xb, 0xd, 0x7, 0x1, 0x5, 0x3, 0x9, 0xf, 0xe, 0x8, 0x2, 0x4, },
879 /* 7 */ { 0x0, 0x7, 0xe, 0x9, 0xf, 0x8, 0x1, 0x6, 0xd, 0xa, 0x3, 0x4, 0x2, 0x5, 0xc, 0xb, },
880 /* 8 */ { 0x0, 0x8, 0x3, 0xb, 0x6, 0xe, 0x5, 0xd, 0xc, 0x4, 0xf, 0x7, 0xa, 0x2, 0x9, 0x1, },
881 /* 9 */ { 0x0, 0x9, 0x1, 0x8, 0x2, 0xb, 0x3, 0xa, 0x4, 0xd, 0x5, 0xc, 0x6, 0xf, 0x7, 0xe, },
882 /* a */ { 0x0, 0xa, 0x7, 0xd, 0xe, 0x4, 0x9, 0x3, 0xf, 0x5, 0x8, 0x2, 0x1, 0xb, 0x6, 0xc, },
883 /* b */ { 0x0, 0xb, 0x5, 0xe, 0xa, 0x1, 0xf, 0x4, 0x7, 0xc, 0x2, 0x9, 0xd, 0x6, 0x8, 0x3, },
884 /* c */ { 0x0, 0xc, 0xb, 0x7, 0x5, 0x9, 0xe, 0x2, 0xa, 0x6, 0x1, 0xd, 0xf, 0x3, 0x4, 0x8, },
885 /* d */ { 0x0, 0xd, 0x9, 0x4, 0x1, 0xc, 0x8, 0x5, 0x2, 0xf, 0xb, 0x6, 0x3, 0xe, 0xa, 0x7, },
886 /* e */ { 0x0, 0xe, 0xf, 0x1, 0xd, 0x3, 0x2, 0xc, 0x9, 0x7, 0x6, 0x8, 0x4, 0xa, 0xb, 0x5, },
887 /* f */ { 0x0, 0xf, 0xd, 0x2, 0x9, 0x6, 0x4, 0xb, 0x1, 0xe, 0xc, 0x3, 0x8, 0x7, 0x5, 0xa, },
888};
889
890const struct BL_CKEccFile::mulfact BL_CKEccFile::nibbles[] =
891{
892 // good
893 { 0x1, 0 }, /* nib0 */
894 { 0x2, 1 },
895 { 0x3, 2 },
896 { 0x4, 3 },
897 { 0x5, 4 },
898 { 0x6, 5 },
899 { 0x7, 6 },
900 { 0x8, 7 },
901 { 0x9, 8 },
902 { 0xa, 9 },
903 { 0xb, 10 },
904 { 0xc, 11 },
905 { 0xd, 12 },
906 { 0xe, 13 },
907 { 0xf, 14 },
908 { 0x1, 15 },
909 { 0x2, 16 },
910 { 0x3, 17 },
911 { 0x4, 18 },
912 { 0x5, 19 },
913 { 0x6, 20 },
914 { 0x7, 21 },
915 { 0x8, 22 },
916 { 0x9, 23 },
917 { 0xa, 24 },
918 { 0xb, 25 },
919 { 0xc, 26 },
920 { 0xd, 27 },
921 { 0xe, 28 },
922 { 0xf, 29 },
923 { 0x1, 31 },
924
925 { 0x0, 0 },/* end of table */
926
927 { 0x1, 0 }, /* nib1 */
928 { 0x1, 1 },
929 { 0x1, 2 },
930 { 0x1, 3 },
931 { 0x1, 4 },
932 { 0x1, 5 },
933 { 0x1, 6 },
934 { 0x1, 7 },
935 { 0x1, 8 },
936 { 0x1, 9 },
937 { 0x1, 10 },
938 { 0x1, 11 },
939 { 0x1, 12 },
940 { 0x1, 13 },
941 { 0x1, 14 },
942 { 0x1, 30 },
943 { 0x1, 31 },
944
945 { 0x0, 0 },/* end of table */
946
947 { 0x1, 15 }, /* nib2 */
948 { 0x1, 16 },
949 { 0x1, 17 },
950 { 0x1, 18 },
951 { 0x1, 19 },
952 { 0x1, 20 },
953 { 0x1, 21 },
954 { 0x1, 22 },
955 { 0x1, 23 },
956 { 0x1, 24 },
957 { 0x1, 25 },
958 { 0x1, 26 },
959 { 0x1, 27 },
960 { 0x1, 28 },
961 { 0x1, 29 },
962 { 0x1, 30 },
963 { 0x1, 31 },
964
965 { 0x0, 0 },/* end of subtable */
966
967 { 0x1, 0 }, /* nib3 */
968 { 0x9, 1 },
969 { 0xe, 2 },
970 { 0xd, 3 },
971 { 0xb, 4 },
972 { 0x7, 5 },
973 { 0x6, 6 },
974 { 0xf, 7 },
975 { 0x2, 8 },
976 { 0xc, 9 },
977 { 0x5, 10 },
978 { 0xa, 11 },
979 { 0x4, 12 },
980 { 0x3, 13 },
981 { 0x8, 14 },
982 { 0x1, 15 },
983 { 0x9, 16 },
984 { 0xe, 17 },
985 { 0xd, 18 },
986 { 0xb, 19 },
987 { 0x7, 20 },
988 { 0x6, 21 },
989 { 0xf, 22 },
990 { 0x2, 23 },
991 { 0xc, 24 },
992 { 0x5, 25 },
993 { 0xa, 26 },
994 { 0x4, 27 },
995 { 0x3, 28 },
996 { 0x8, 29 },
997 { 0x1, 30 },
998
999 { 0x0, 0 },/* end of subtable */
1000
1001 { 0x0, 0 } /* end of table */
1002};
1003
1004BL_CKEccFile::BL_CKEccFile() {}
1005
1006// Destructor definition
1007BL_CKEccFile::~BL_CKEccFile() {}
1008
1009uint32_t BL_CKEccFile::generateChipkillECC(ChipKillLine line)
1010{
1011 unsigned long long data[2];
1012 data[0] = line.msdw;
1013 data[1] = line.lsdw;
1014
1015 const struct mulfact *nibs = nibbles;
1016 unsigned check = 0;
1017
1018 for (nibs = nibbles; nibs->mult; )
1019 {
1020 do
1021 {
1022 unsigned long long d;
1023
1024 d = data[nibs->nibble_num < 16];
1025 d >>= ((nibs->nibble_num & 0xf)*4);
1026 d &= 0xf;
1027
1028 check ^= galois[nibs->mult][d];
1029 nibs++;
1030 }
1031 while (nibs->mult);
1032
1033 nibs++;
1034 if (nibs->mult)
1035 {
1036 check <<= 4;
1037 }
1038 }
1039
1040 return check;
1041}