Line data Source code
1 : /* Note: This file is auto generated. */
2 : #include "fd_reedsol_ppt.h"
3 : #include "fd_reedsol_fderiv.h"
4 :
5 : FD_FN_UNSANITIZED int
6 : fd_reedsol_private_recover_var_128( ulong shred_sz,
7 : uchar * const * shred,
8 : ulong data_shred_cnt,
9 : ulong parity_shred_cnt,
10 15 : uchar const * erased ) {
11 15 : uchar _erased[ 128 ] W_ATTR;
12 15 : uchar pi[ 128 ] W_ATTR;
13 15 : ulong shred_cnt = data_shred_cnt + parity_shred_cnt;
14 15 : ulong loaded_cnt = 0UL;
15 1935 : for( ulong i=0UL; i<128UL; i++) {
16 1920 : int load_shred = ((i<shred_cnt)&(loaded_cnt<data_shred_cnt))&&( erased[ i ]==0 );
17 1920 : _erased[ i ] = !load_shred;
18 1920 : loaded_cnt += (ulong)load_shred;
19 1920 : }
20 15 : if( FD_UNLIKELY( loaded_cnt<data_shred_cnt ) ) return FD_REEDSOL_ERR_PARTIAL;
21 :
22 15 : fd_reedsol_private_gen_pi_128( _erased, pi );
23 :
24 : /* Store the difference for each shred that was regenerated. This
25 : must be 0. Otherwise there's a corrupt shred. */
26 15 : gf_t diff = gf_zero();
27 :
28 468 : for( ulong shred_pos=0UL; shred_pos<shred_sz; /* advanced manually at end of loop */ ) {
29 : /* Load exactly data_shred_cnt un-erased input shreds into
30 : their respective vector. Fill the erased vectors with 0. */
31 453 : gf_t in00 = _erased[ 0 ] ? gf_zero() : gf_ldu( shred[ 0 ] + shred_pos );
32 453 : gf_t in01 = _erased[ 1 ] ? gf_zero() : gf_ldu( shred[ 1 ] + shred_pos );
33 453 : gf_t in02 = _erased[ 2 ] ? gf_zero() : gf_ldu( shred[ 2 ] + shred_pos );
34 453 : gf_t in03 = _erased[ 3 ] ? gf_zero() : gf_ldu( shred[ 3 ] + shred_pos );
35 453 : gf_t in04 = _erased[ 4 ] ? gf_zero() : gf_ldu( shred[ 4 ] + shred_pos );
36 453 : gf_t in05 = _erased[ 5 ] ? gf_zero() : gf_ldu( shred[ 5 ] + shred_pos );
37 453 : gf_t in06 = _erased[ 6 ] ? gf_zero() : gf_ldu( shred[ 6 ] + shred_pos );
38 453 : gf_t in07 = _erased[ 7 ] ? gf_zero() : gf_ldu( shred[ 7 ] + shred_pos );
39 453 : gf_t in08 = _erased[ 8 ] ? gf_zero() : gf_ldu( shred[ 8 ] + shred_pos );
40 453 : gf_t in09 = _erased[ 9 ] ? gf_zero() : gf_ldu( shred[ 9 ] + shred_pos );
41 453 : gf_t in10 = _erased[ 10 ] ? gf_zero() : gf_ldu( shred[ 10 ] + shred_pos );
42 453 : gf_t in11 = _erased[ 11 ] ? gf_zero() : gf_ldu( shred[ 11 ] + shred_pos );
43 453 : gf_t in12 = _erased[ 12 ] ? gf_zero() : gf_ldu( shred[ 12 ] + shred_pos );
44 453 : gf_t in13 = _erased[ 13 ] ? gf_zero() : gf_ldu( shred[ 13 ] + shred_pos );
45 453 : gf_t in14 = _erased[ 14 ] ? gf_zero() : gf_ldu( shred[ 14 ] + shred_pos );
46 453 : gf_t in15 = _erased[ 15 ] ? gf_zero() : gf_ldu( shred[ 15 ] + shred_pos );
47 453 : gf_t in16 = _erased[ 16 ] ? gf_zero() : gf_ldu( shred[ 16 ] + shred_pos );
48 453 : gf_t in17 = _erased[ 17 ] ? gf_zero() : gf_ldu( shred[ 17 ] + shred_pos );
49 453 : gf_t in18 = _erased[ 18 ] ? gf_zero() : gf_ldu( shred[ 18 ] + shred_pos );
50 453 : gf_t in19 = _erased[ 19 ] ? gf_zero() : gf_ldu( shred[ 19 ] + shred_pos );
51 453 : gf_t in20 = _erased[ 20 ] ? gf_zero() : gf_ldu( shred[ 20 ] + shred_pos );
52 453 : gf_t in21 = _erased[ 21 ] ? gf_zero() : gf_ldu( shred[ 21 ] + shred_pos );
53 453 : gf_t in22 = _erased[ 22 ] ? gf_zero() : gf_ldu( shred[ 22 ] + shred_pos );
54 453 : gf_t in23 = _erased[ 23 ] ? gf_zero() : gf_ldu( shred[ 23 ] + shred_pos );
55 453 : gf_t in24 = _erased[ 24 ] ? gf_zero() : gf_ldu( shred[ 24 ] + shred_pos );
56 453 : gf_t in25 = _erased[ 25 ] ? gf_zero() : gf_ldu( shred[ 25 ] + shred_pos );
57 453 : gf_t in26 = _erased[ 26 ] ? gf_zero() : gf_ldu( shred[ 26 ] + shred_pos );
58 453 : gf_t in27 = _erased[ 27 ] ? gf_zero() : gf_ldu( shred[ 27 ] + shred_pos );
59 453 : gf_t in28 = _erased[ 28 ] ? gf_zero() : gf_ldu( shred[ 28 ] + shred_pos );
60 453 : gf_t in29 = _erased[ 29 ] ? gf_zero() : gf_ldu( shred[ 29 ] + shred_pos );
61 453 : gf_t in30 = _erased[ 30 ] ? gf_zero() : gf_ldu( shred[ 30 ] + shred_pos );
62 453 : gf_t in31 = _erased[ 31 ] ? gf_zero() : gf_ldu( shred[ 31 ] + shred_pos );
63 453 : gf_t in32 = _erased[ 32 ] ? gf_zero() : gf_ldu( shred[ 32 ] + shred_pos );
64 453 : gf_t in33 = _erased[ 33 ] ? gf_zero() : gf_ldu( shred[ 33 ] + shred_pos );
65 453 : gf_t in34 = _erased[ 34 ] ? gf_zero() : gf_ldu( shred[ 34 ] + shred_pos );
66 453 : gf_t in35 = _erased[ 35 ] ? gf_zero() : gf_ldu( shred[ 35 ] + shred_pos );
67 453 : gf_t in36 = _erased[ 36 ] ? gf_zero() : gf_ldu( shred[ 36 ] + shred_pos );
68 453 : gf_t in37 = _erased[ 37 ] ? gf_zero() : gf_ldu( shred[ 37 ] + shred_pos );
69 453 : gf_t in38 = _erased[ 38 ] ? gf_zero() : gf_ldu( shred[ 38 ] + shred_pos );
70 453 : gf_t in39 = _erased[ 39 ] ? gf_zero() : gf_ldu( shred[ 39 ] + shred_pos );
71 453 : gf_t in40 = _erased[ 40 ] ? gf_zero() : gf_ldu( shred[ 40 ] + shred_pos );
72 453 : gf_t in41 = _erased[ 41 ] ? gf_zero() : gf_ldu( shred[ 41 ] + shred_pos );
73 453 : gf_t in42 = _erased[ 42 ] ? gf_zero() : gf_ldu( shred[ 42 ] + shred_pos );
74 453 : gf_t in43 = _erased[ 43 ] ? gf_zero() : gf_ldu( shred[ 43 ] + shred_pos );
75 453 : gf_t in44 = _erased[ 44 ] ? gf_zero() : gf_ldu( shred[ 44 ] + shred_pos );
76 453 : gf_t in45 = _erased[ 45 ] ? gf_zero() : gf_ldu( shred[ 45 ] + shred_pos );
77 453 : gf_t in46 = _erased[ 46 ] ? gf_zero() : gf_ldu( shred[ 46 ] + shred_pos );
78 453 : gf_t in47 = _erased[ 47 ] ? gf_zero() : gf_ldu( shred[ 47 ] + shred_pos );
79 453 : gf_t in48 = _erased[ 48 ] ? gf_zero() : gf_ldu( shred[ 48 ] + shred_pos );
80 453 : gf_t in49 = _erased[ 49 ] ? gf_zero() : gf_ldu( shred[ 49 ] + shred_pos );
81 453 : gf_t in50 = _erased[ 50 ] ? gf_zero() : gf_ldu( shred[ 50 ] + shred_pos );
82 453 : gf_t in51 = _erased[ 51 ] ? gf_zero() : gf_ldu( shred[ 51 ] + shred_pos );
83 453 : gf_t in52 = _erased[ 52 ] ? gf_zero() : gf_ldu( shred[ 52 ] + shred_pos );
84 453 : gf_t in53 = _erased[ 53 ] ? gf_zero() : gf_ldu( shred[ 53 ] + shred_pos );
85 453 : gf_t in54 = _erased[ 54 ] ? gf_zero() : gf_ldu( shred[ 54 ] + shred_pos );
86 453 : gf_t in55 = _erased[ 55 ] ? gf_zero() : gf_ldu( shred[ 55 ] + shred_pos );
87 453 : gf_t in56 = _erased[ 56 ] ? gf_zero() : gf_ldu( shred[ 56 ] + shred_pos );
88 453 : gf_t in57 = _erased[ 57 ] ? gf_zero() : gf_ldu( shred[ 57 ] + shred_pos );
89 453 : gf_t in58 = _erased[ 58 ] ? gf_zero() : gf_ldu( shred[ 58 ] + shred_pos );
90 453 : gf_t in59 = _erased[ 59 ] ? gf_zero() : gf_ldu( shred[ 59 ] + shred_pos );
91 453 : gf_t in60 = _erased[ 60 ] ? gf_zero() : gf_ldu( shred[ 60 ] + shred_pos );
92 453 : gf_t in61 = _erased[ 61 ] ? gf_zero() : gf_ldu( shred[ 61 ] + shred_pos );
93 453 : gf_t in62 = _erased[ 62 ] ? gf_zero() : gf_ldu( shred[ 62 ] + shred_pos );
94 453 : gf_t in63 = _erased[ 63 ] ? gf_zero() : gf_ldu( shred[ 63 ] + shred_pos );
95 453 : gf_t in64 = _erased[ 64 ] ? gf_zero() : gf_ldu( shred[ 64 ] + shred_pos );
96 453 : gf_t in65 = _erased[ 65 ] ? gf_zero() : gf_ldu( shred[ 65 ] + shred_pos );
97 453 : gf_t in66 = _erased[ 66 ] ? gf_zero() : gf_ldu( shred[ 66 ] + shred_pos );
98 453 : gf_t in67 = _erased[ 67 ] ? gf_zero() : gf_ldu( shred[ 67 ] + shred_pos );
99 453 : gf_t in68 = _erased[ 68 ] ? gf_zero() : gf_ldu( shred[ 68 ] + shred_pos );
100 453 : gf_t in69 = _erased[ 69 ] ? gf_zero() : gf_ldu( shred[ 69 ] + shred_pos );
101 453 : gf_t in70 = _erased[ 70 ] ? gf_zero() : gf_ldu( shred[ 70 ] + shred_pos );
102 453 : gf_t in71 = _erased[ 71 ] ? gf_zero() : gf_ldu( shred[ 71 ] + shred_pos );
103 453 : gf_t in72 = _erased[ 72 ] ? gf_zero() : gf_ldu( shred[ 72 ] + shred_pos );
104 453 : gf_t in73 = _erased[ 73 ] ? gf_zero() : gf_ldu( shred[ 73 ] + shred_pos );
105 453 : gf_t in74 = _erased[ 74 ] ? gf_zero() : gf_ldu( shred[ 74 ] + shred_pos );
106 453 : gf_t in75 = _erased[ 75 ] ? gf_zero() : gf_ldu( shred[ 75 ] + shred_pos );
107 453 : gf_t in76 = _erased[ 76 ] ? gf_zero() : gf_ldu( shred[ 76 ] + shred_pos );
108 453 : gf_t in77 = _erased[ 77 ] ? gf_zero() : gf_ldu( shred[ 77 ] + shred_pos );
109 453 : gf_t in78 = _erased[ 78 ] ? gf_zero() : gf_ldu( shred[ 78 ] + shred_pos );
110 453 : gf_t in79 = _erased[ 79 ] ? gf_zero() : gf_ldu( shred[ 79 ] + shred_pos );
111 453 : gf_t in80 = _erased[ 80 ] ? gf_zero() : gf_ldu( shred[ 80 ] + shred_pos );
112 453 : gf_t in81 = _erased[ 81 ] ? gf_zero() : gf_ldu( shred[ 81 ] + shred_pos );
113 453 : gf_t in82 = _erased[ 82 ] ? gf_zero() : gf_ldu( shred[ 82 ] + shred_pos );
114 453 : gf_t in83 = _erased[ 83 ] ? gf_zero() : gf_ldu( shred[ 83 ] + shred_pos );
115 453 : gf_t in84 = _erased[ 84 ] ? gf_zero() : gf_ldu( shred[ 84 ] + shred_pos );
116 453 : gf_t in85 = _erased[ 85 ] ? gf_zero() : gf_ldu( shred[ 85 ] + shred_pos );
117 453 : gf_t in86 = _erased[ 86 ] ? gf_zero() : gf_ldu( shred[ 86 ] + shred_pos );
118 453 : gf_t in87 = _erased[ 87 ] ? gf_zero() : gf_ldu( shred[ 87 ] + shred_pos );
119 453 : gf_t in88 = _erased[ 88 ] ? gf_zero() : gf_ldu( shred[ 88 ] + shred_pos );
120 453 : gf_t in89 = _erased[ 89 ] ? gf_zero() : gf_ldu( shred[ 89 ] + shred_pos );
121 453 : gf_t in90 = _erased[ 90 ] ? gf_zero() : gf_ldu( shred[ 90 ] + shred_pos );
122 453 : gf_t in91 = _erased[ 91 ] ? gf_zero() : gf_ldu( shred[ 91 ] + shred_pos );
123 453 : gf_t in92 = _erased[ 92 ] ? gf_zero() : gf_ldu( shred[ 92 ] + shred_pos );
124 453 : gf_t in93 = _erased[ 93 ] ? gf_zero() : gf_ldu( shred[ 93 ] + shred_pos );
125 453 : gf_t in94 = _erased[ 94 ] ? gf_zero() : gf_ldu( shred[ 94 ] + shred_pos );
126 453 : gf_t in95 = _erased[ 95 ] ? gf_zero() : gf_ldu( shred[ 95 ] + shred_pos );
127 453 : gf_t in96 = _erased[ 96 ] ? gf_zero() : gf_ldu( shred[ 96 ] + shred_pos );
128 453 : gf_t in97 = _erased[ 97 ] ? gf_zero() : gf_ldu( shred[ 97 ] + shred_pos );
129 453 : gf_t in98 = _erased[ 98 ] ? gf_zero() : gf_ldu( shred[ 98 ] + shred_pos );
130 453 : gf_t in99 = _erased[ 99 ] ? gf_zero() : gf_ldu( shred[ 99 ] + shred_pos );
131 453 : gf_t in100 = _erased[ 100 ] ? gf_zero() : gf_ldu( shred[ 100 ] + shred_pos );
132 453 : gf_t in101 = _erased[ 101 ] ? gf_zero() : gf_ldu( shred[ 101 ] + shred_pos );
133 453 : gf_t in102 = _erased[ 102 ] ? gf_zero() : gf_ldu( shred[ 102 ] + shred_pos );
134 453 : gf_t in103 = _erased[ 103 ] ? gf_zero() : gf_ldu( shred[ 103 ] + shred_pos );
135 453 : gf_t in104 = _erased[ 104 ] ? gf_zero() : gf_ldu( shred[ 104 ] + shred_pos );
136 453 : gf_t in105 = _erased[ 105 ] ? gf_zero() : gf_ldu( shred[ 105 ] + shred_pos );
137 453 : gf_t in106 = _erased[ 106 ] ? gf_zero() : gf_ldu( shred[ 106 ] + shred_pos );
138 453 : gf_t in107 = _erased[ 107 ] ? gf_zero() : gf_ldu( shred[ 107 ] + shred_pos );
139 453 : gf_t in108 = _erased[ 108 ] ? gf_zero() : gf_ldu( shred[ 108 ] + shred_pos );
140 453 : gf_t in109 = _erased[ 109 ] ? gf_zero() : gf_ldu( shred[ 109 ] + shred_pos );
141 453 : gf_t in110 = _erased[ 110 ] ? gf_zero() : gf_ldu( shred[ 110 ] + shred_pos );
142 453 : gf_t in111 = _erased[ 111 ] ? gf_zero() : gf_ldu( shred[ 111 ] + shred_pos );
143 453 : gf_t in112 = _erased[ 112 ] ? gf_zero() : gf_ldu( shred[ 112 ] + shred_pos );
144 453 : gf_t in113 = _erased[ 113 ] ? gf_zero() : gf_ldu( shred[ 113 ] + shred_pos );
145 453 : gf_t in114 = _erased[ 114 ] ? gf_zero() : gf_ldu( shred[ 114 ] + shred_pos );
146 453 : gf_t in115 = _erased[ 115 ] ? gf_zero() : gf_ldu( shred[ 115 ] + shred_pos );
147 453 : gf_t in116 = _erased[ 116 ] ? gf_zero() : gf_ldu( shred[ 116 ] + shred_pos );
148 453 : gf_t in117 = _erased[ 117 ] ? gf_zero() : gf_ldu( shred[ 117 ] + shred_pos );
149 453 : gf_t in118 = _erased[ 118 ] ? gf_zero() : gf_ldu( shred[ 118 ] + shred_pos );
150 453 : gf_t in119 = _erased[ 119 ] ? gf_zero() : gf_ldu( shred[ 119 ] + shred_pos );
151 453 : gf_t in120 = _erased[ 120 ] ? gf_zero() : gf_ldu( shred[ 120 ] + shred_pos );
152 453 : gf_t in121 = _erased[ 121 ] ? gf_zero() : gf_ldu( shred[ 121 ] + shred_pos );
153 453 : gf_t in122 = _erased[ 122 ] ? gf_zero() : gf_ldu( shred[ 122 ] + shred_pos );
154 453 : gf_t in123 = _erased[ 123 ] ? gf_zero() : gf_ldu( shred[ 123 ] + shred_pos );
155 453 : gf_t in124 = _erased[ 124 ] ? gf_zero() : gf_ldu( shred[ 124 ] + shred_pos );
156 453 : gf_t in125 = _erased[ 125 ] ? gf_zero() : gf_ldu( shred[ 125 ] + shred_pos );
157 453 : gf_t in126 = _erased[ 126 ] ? gf_zero() : gf_ldu( shred[ 126 ] + shred_pos );
158 453 : gf_t in127 = _erased[ 127 ] ? gf_zero() : gf_ldu( shred[ 127 ] + shred_pos );
159 : /* Technically, we only need to multiply the non-erased ones, since
160 : the erased ones are 0, but we know at least half of them are
161 : non-erased, and the branch is going to be just as costly as the
162 : multiply. */
163 453 : in00 = GF_MUL_VAR( in00, pi[ 0 ] );
164 453 : in01 = GF_MUL_VAR( in01, pi[ 1 ] );
165 453 : in02 = GF_MUL_VAR( in02, pi[ 2 ] );
166 453 : in03 = GF_MUL_VAR( in03, pi[ 3 ] );
167 453 : in04 = GF_MUL_VAR( in04, pi[ 4 ] );
168 453 : in05 = GF_MUL_VAR( in05, pi[ 5 ] );
169 453 : in06 = GF_MUL_VAR( in06, pi[ 6 ] );
170 453 : in07 = GF_MUL_VAR( in07, pi[ 7 ] );
171 453 : in08 = GF_MUL_VAR( in08, pi[ 8 ] );
172 453 : in09 = GF_MUL_VAR( in09, pi[ 9 ] );
173 453 : in10 = GF_MUL_VAR( in10, pi[ 10 ] );
174 453 : in11 = GF_MUL_VAR( in11, pi[ 11 ] );
175 453 : in12 = GF_MUL_VAR( in12, pi[ 12 ] );
176 453 : in13 = GF_MUL_VAR( in13, pi[ 13 ] );
177 453 : in14 = GF_MUL_VAR( in14, pi[ 14 ] );
178 453 : in15 = GF_MUL_VAR( in15, pi[ 15 ] );
179 453 : in16 = GF_MUL_VAR( in16, pi[ 16 ] );
180 453 : in17 = GF_MUL_VAR( in17, pi[ 17 ] );
181 453 : in18 = GF_MUL_VAR( in18, pi[ 18 ] );
182 453 : in19 = GF_MUL_VAR( in19, pi[ 19 ] );
183 453 : in20 = GF_MUL_VAR( in20, pi[ 20 ] );
184 453 : in21 = GF_MUL_VAR( in21, pi[ 21 ] );
185 453 : in22 = GF_MUL_VAR( in22, pi[ 22 ] );
186 453 : in23 = GF_MUL_VAR( in23, pi[ 23 ] );
187 453 : in24 = GF_MUL_VAR( in24, pi[ 24 ] );
188 453 : in25 = GF_MUL_VAR( in25, pi[ 25 ] );
189 453 : in26 = GF_MUL_VAR( in26, pi[ 26 ] );
190 453 : in27 = GF_MUL_VAR( in27, pi[ 27 ] );
191 453 : in28 = GF_MUL_VAR( in28, pi[ 28 ] );
192 453 : in29 = GF_MUL_VAR( in29, pi[ 29 ] );
193 453 : in30 = GF_MUL_VAR( in30, pi[ 30 ] );
194 453 : in31 = GF_MUL_VAR( in31, pi[ 31 ] );
195 453 : in32 = GF_MUL_VAR( in32, pi[ 32 ] );
196 453 : in33 = GF_MUL_VAR( in33, pi[ 33 ] );
197 453 : in34 = GF_MUL_VAR( in34, pi[ 34 ] );
198 453 : in35 = GF_MUL_VAR( in35, pi[ 35 ] );
199 453 : in36 = GF_MUL_VAR( in36, pi[ 36 ] );
200 453 : in37 = GF_MUL_VAR( in37, pi[ 37 ] );
201 453 : in38 = GF_MUL_VAR( in38, pi[ 38 ] );
202 453 : in39 = GF_MUL_VAR( in39, pi[ 39 ] );
203 453 : in40 = GF_MUL_VAR( in40, pi[ 40 ] );
204 453 : in41 = GF_MUL_VAR( in41, pi[ 41 ] );
205 453 : in42 = GF_MUL_VAR( in42, pi[ 42 ] );
206 453 : in43 = GF_MUL_VAR( in43, pi[ 43 ] );
207 453 : in44 = GF_MUL_VAR( in44, pi[ 44 ] );
208 453 : in45 = GF_MUL_VAR( in45, pi[ 45 ] );
209 453 : in46 = GF_MUL_VAR( in46, pi[ 46 ] );
210 453 : in47 = GF_MUL_VAR( in47, pi[ 47 ] );
211 453 : in48 = GF_MUL_VAR( in48, pi[ 48 ] );
212 453 : in49 = GF_MUL_VAR( in49, pi[ 49 ] );
213 453 : in50 = GF_MUL_VAR( in50, pi[ 50 ] );
214 453 : in51 = GF_MUL_VAR( in51, pi[ 51 ] );
215 453 : in52 = GF_MUL_VAR( in52, pi[ 52 ] );
216 453 : in53 = GF_MUL_VAR( in53, pi[ 53 ] );
217 453 : in54 = GF_MUL_VAR( in54, pi[ 54 ] );
218 453 : in55 = GF_MUL_VAR( in55, pi[ 55 ] );
219 453 : in56 = GF_MUL_VAR( in56, pi[ 56 ] );
220 453 : in57 = GF_MUL_VAR( in57, pi[ 57 ] );
221 453 : in58 = GF_MUL_VAR( in58, pi[ 58 ] );
222 453 : in59 = GF_MUL_VAR( in59, pi[ 59 ] );
223 453 : in60 = GF_MUL_VAR( in60, pi[ 60 ] );
224 453 : in61 = GF_MUL_VAR( in61, pi[ 61 ] );
225 453 : in62 = GF_MUL_VAR( in62, pi[ 62 ] );
226 453 : in63 = GF_MUL_VAR( in63, pi[ 63 ] );
227 453 : in64 = GF_MUL_VAR( in64, pi[ 64 ] );
228 453 : in65 = GF_MUL_VAR( in65, pi[ 65 ] );
229 453 : in66 = GF_MUL_VAR( in66, pi[ 66 ] );
230 453 : in67 = GF_MUL_VAR( in67, pi[ 67 ] );
231 453 : in68 = GF_MUL_VAR( in68, pi[ 68 ] );
232 453 : in69 = GF_MUL_VAR( in69, pi[ 69 ] );
233 453 : in70 = GF_MUL_VAR( in70, pi[ 70 ] );
234 453 : in71 = GF_MUL_VAR( in71, pi[ 71 ] );
235 453 : in72 = GF_MUL_VAR( in72, pi[ 72 ] );
236 453 : in73 = GF_MUL_VAR( in73, pi[ 73 ] );
237 453 : in74 = GF_MUL_VAR( in74, pi[ 74 ] );
238 453 : in75 = GF_MUL_VAR( in75, pi[ 75 ] );
239 453 : in76 = GF_MUL_VAR( in76, pi[ 76 ] );
240 453 : in77 = GF_MUL_VAR( in77, pi[ 77 ] );
241 453 : in78 = GF_MUL_VAR( in78, pi[ 78 ] );
242 453 : in79 = GF_MUL_VAR( in79, pi[ 79 ] );
243 453 : in80 = GF_MUL_VAR( in80, pi[ 80 ] );
244 453 : in81 = GF_MUL_VAR( in81, pi[ 81 ] );
245 453 : in82 = GF_MUL_VAR( in82, pi[ 82 ] );
246 453 : in83 = GF_MUL_VAR( in83, pi[ 83 ] );
247 453 : in84 = GF_MUL_VAR( in84, pi[ 84 ] );
248 453 : in85 = GF_MUL_VAR( in85, pi[ 85 ] );
249 453 : in86 = GF_MUL_VAR( in86, pi[ 86 ] );
250 453 : in87 = GF_MUL_VAR( in87, pi[ 87 ] );
251 453 : in88 = GF_MUL_VAR( in88, pi[ 88 ] );
252 453 : in89 = GF_MUL_VAR( in89, pi[ 89 ] );
253 453 : in90 = GF_MUL_VAR( in90, pi[ 90 ] );
254 453 : in91 = GF_MUL_VAR( in91, pi[ 91 ] );
255 453 : in92 = GF_MUL_VAR( in92, pi[ 92 ] );
256 453 : in93 = GF_MUL_VAR( in93, pi[ 93 ] );
257 453 : in94 = GF_MUL_VAR( in94, pi[ 94 ] );
258 453 : in95 = GF_MUL_VAR( in95, pi[ 95 ] );
259 453 : in96 = GF_MUL_VAR( in96, pi[ 96 ] );
260 453 : in97 = GF_MUL_VAR( in97, pi[ 97 ] );
261 453 : in98 = GF_MUL_VAR( in98, pi[ 98 ] );
262 453 : in99 = GF_MUL_VAR( in99, pi[ 99 ] );
263 453 : in100 = GF_MUL_VAR( in100, pi[ 100 ] );
264 453 : in101 = GF_MUL_VAR( in101, pi[ 101 ] );
265 453 : in102 = GF_MUL_VAR( in102, pi[ 102 ] );
266 453 : in103 = GF_MUL_VAR( in103, pi[ 103 ] );
267 453 : in104 = GF_MUL_VAR( in104, pi[ 104 ] );
268 453 : in105 = GF_MUL_VAR( in105, pi[ 105 ] );
269 453 : in106 = GF_MUL_VAR( in106, pi[ 106 ] );
270 453 : in107 = GF_MUL_VAR( in107, pi[ 107 ] );
271 453 : in108 = GF_MUL_VAR( in108, pi[ 108 ] );
272 453 : in109 = GF_MUL_VAR( in109, pi[ 109 ] );
273 453 : in110 = GF_MUL_VAR( in110, pi[ 110 ] );
274 453 : in111 = GF_MUL_VAR( in111, pi[ 111 ] );
275 453 : in112 = GF_MUL_VAR( in112, pi[ 112 ] );
276 453 : in113 = GF_MUL_VAR( in113, pi[ 113 ] );
277 453 : in114 = GF_MUL_VAR( in114, pi[ 114 ] );
278 453 : in115 = GF_MUL_VAR( in115, pi[ 115 ] );
279 453 : in116 = GF_MUL_VAR( in116, pi[ 116 ] );
280 453 : in117 = GF_MUL_VAR( in117, pi[ 117 ] );
281 453 : in118 = GF_MUL_VAR( in118, pi[ 118 ] );
282 453 : in119 = GF_MUL_VAR( in119, pi[ 119 ] );
283 453 : in120 = GF_MUL_VAR( in120, pi[ 120 ] );
284 453 : in121 = GF_MUL_VAR( in121, pi[ 121 ] );
285 453 : in122 = GF_MUL_VAR( in122, pi[ 122 ] );
286 453 : in123 = GF_MUL_VAR( in123, pi[ 123 ] );
287 453 : in124 = GF_MUL_VAR( in124, pi[ 124 ] );
288 453 : in125 = GF_MUL_VAR( in125, pi[ 125 ] );
289 453 : in126 = GF_MUL_VAR( in126, pi[ 126 ] );
290 453 : in127 = GF_MUL_VAR( in127, pi[ 127 ] );
291 453 : #define ALL_VARS in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31, in32, in33, in34, in35, in36, in37, in38, in39, in40, in41, in42, in43, in44, in45, in46, in47, in48, in49, in50, in51, in52, in53, in54, in55, in56, in57, in58, in59, in60, in61, in62, in63, in64, in65, in66, in67, in68, in69, in70, in71, in72, in73, in74, in75, in76, in77, in78, in79, in80, in81, in82, in83, in84, in85, in86, in87, in88, in89, in90, in91, in92, in93, in94, in95, in96, in97, in98, in99, in100, in101, in102, in103, in104, in105, in106, in107, in108, in109, in110, in111, in112, in113, in114, in115, in116, in117, in118, in119, in120, in121, in122, in123, in124, in125, in126, in127
292 906 : #define ALL_VARS_REF &in00, &in01, &in02, &in03, &in04, &in05, &in06, &in07, &in08, &in09, &in10, &in11, &in12, &in13, &in14, &in15, &in16, &in17, &in18, &in19, &in20, &in21, &in22, &in23, &in24, &in25, &in26, &in27, &in28, &in29, &in30, &in31, &in32, &in33, &in34, &in35, &in36, &in37, &in38, &in39, &in40, &in41, &in42, &in43, &in44, &in45, &in46, &in47, &in48, &in49, &in50, &in51, &in52, &in53, &in54, &in55, &in56, &in57, &in58, &in59, &in60, &in61, &in62, &in63, &in64, &in65, &in66, &in67, &in68, &in69, &in70, &in71, &in72, &in73, &in74, &in75, &in76, &in77, &in78, &in79, &in80, &in81, &in82, &in83, &in84, &in85, &in86, &in87, &in88, &in89, &in90, &in91, &in92, &in93, &in94, &in95, &in96, &in97, &in98, &in99, &in100, &in101, &in102, &in103, &in104, &in105, &in106, &in107, &in108, &in109, &in110, &in111, &in112, &in113, &in114, &in115, &in116, &in117, &in118, &in119, &in120, &in121, &in122, &in123, &in124, &in125, &in126, &in127
293 :
294 453 : fd_reedsol_ifft_128_0( ALL_VARS_REF );
295 :
296 453 : FD_REEDSOL_GENERATE_FDERIV( 128, ALL_VARS );
297 :
298 453 : fd_reedsol_fft_128_0( ALL_VARS_REF );
299 :
300 : /* Again, we only need to multiply the erased ones, since we don't
301 : use the value of the non-erased ones anymore, but I'll take
302 : multiplies over branches most days. */
303 453 : in00 = GF_MUL_VAR( in00, pi[ 0 ] );
304 453 : in01 = GF_MUL_VAR( in01, pi[ 1 ] );
305 453 : in02 = GF_MUL_VAR( in02, pi[ 2 ] );
306 453 : in03 = GF_MUL_VAR( in03, pi[ 3 ] );
307 453 : in04 = GF_MUL_VAR( in04, pi[ 4 ] );
308 453 : in05 = GF_MUL_VAR( in05, pi[ 5 ] );
309 453 : in06 = GF_MUL_VAR( in06, pi[ 6 ] );
310 453 : in07 = GF_MUL_VAR( in07, pi[ 7 ] );
311 453 : in08 = GF_MUL_VAR( in08, pi[ 8 ] );
312 453 : in09 = GF_MUL_VAR( in09, pi[ 9 ] );
313 453 : in10 = GF_MUL_VAR( in10, pi[ 10 ] );
314 453 : in11 = GF_MUL_VAR( in11, pi[ 11 ] );
315 453 : in12 = GF_MUL_VAR( in12, pi[ 12 ] );
316 453 : in13 = GF_MUL_VAR( in13, pi[ 13 ] );
317 453 : in14 = GF_MUL_VAR( in14, pi[ 14 ] );
318 453 : in15 = GF_MUL_VAR( in15, pi[ 15 ] );
319 453 : in16 = GF_MUL_VAR( in16, pi[ 16 ] );
320 453 : in17 = GF_MUL_VAR( in17, pi[ 17 ] );
321 453 : in18 = GF_MUL_VAR( in18, pi[ 18 ] );
322 453 : in19 = GF_MUL_VAR( in19, pi[ 19 ] );
323 453 : in20 = GF_MUL_VAR( in20, pi[ 20 ] );
324 453 : in21 = GF_MUL_VAR( in21, pi[ 21 ] );
325 453 : in22 = GF_MUL_VAR( in22, pi[ 22 ] );
326 453 : in23 = GF_MUL_VAR( in23, pi[ 23 ] );
327 453 : in24 = GF_MUL_VAR( in24, pi[ 24 ] );
328 453 : in25 = GF_MUL_VAR( in25, pi[ 25 ] );
329 453 : in26 = GF_MUL_VAR( in26, pi[ 26 ] );
330 453 : in27 = GF_MUL_VAR( in27, pi[ 27 ] );
331 453 : in28 = GF_MUL_VAR( in28, pi[ 28 ] );
332 453 : in29 = GF_MUL_VAR( in29, pi[ 29 ] );
333 453 : in30 = GF_MUL_VAR( in30, pi[ 30 ] );
334 453 : in31 = GF_MUL_VAR( in31, pi[ 31 ] );
335 453 : in32 = GF_MUL_VAR( in32, pi[ 32 ] );
336 453 : in33 = GF_MUL_VAR( in33, pi[ 33 ] );
337 453 : in34 = GF_MUL_VAR( in34, pi[ 34 ] );
338 453 : in35 = GF_MUL_VAR( in35, pi[ 35 ] );
339 453 : in36 = GF_MUL_VAR( in36, pi[ 36 ] );
340 453 : in37 = GF_MUL_VAR( in37, pi[ 37 ] );
341 453 : in38 = GF_MUL_VAR( in38, pi[ 38 ] );
342 453 : in39 = GF_MUL_VAR( in39, pi[ 39 ] );
343 453 : in40 = GF_MUL_VAR( in40, pi[ 40 ] );
344 453 : in41 = GF_MUL_VAR( in41, pi[ 41 ] );
345 453 : in42 = GF_MUL_VAR( in42, pi[ 42 ] );
346 453 : in43 = GF_MUL_VAR( in43, pi[ 43 ] );
347 453 : in44 = GF_MUL_VAR( in44, pi[ 44 ] );
348 453 : in45 = GF_MUL_VAR( in45, pi[ 45 ] );
349 453 : in46 = GF_MUL_VAR( in46, pi[ 46 ] );
350 453 : in47 = GF_MUL_VAR( in47, pi[ 47 ] );
351 453 : in48 = GF_MUL_VAR( in48, pi[ 48 ] );
352 453 : in49 = GF_MUL_VAR( in49, pi[ 49 ] );
353 453 : in50 = GF_MUL_VAR( in50, pi[ 50 ] );
354 453 : in51 = GF_MUL_VAR( in51, pi[ 51 ] );
355 453 : in52 = GF_MUL_VAR( in52, pi[ 52 ] );
356 453 : in53 = GF_MUL_VAR( in53, pi[ 53 ] );
357 453 : in54 = GF_MUL_VAR( in54, pi[ 54 ] );
358 453 : in55 = GF_MUL_VAR( in55, pi[ 55 ] );
359 453 : in56 = GF_MUL_VAR( in56, pi[ 56 ] );
360 453 : in57 = GF_MUL_VAR( in57, pi[ 57 ] );
361 453 : in58 = GF_MUL_VAR( in58, pi[ 58 ] );
362 453 : in59 = GF_MUL_VAR( in59, pi[ 59 ] );
363 453 : in60 = GF_MUL_VAR( in60, pi[ 60 ] );
364 453 : in61 = GF_MUL_VAR( in61, pi[ 61 ] );
365 453 : in62 = GF_MUL_VAR( in62, pi[ 62 ] );
366 453 : in63 = GF_MUL_VAR( in63, pi[ 63 ] );
367 453 : in64 = GF_MUL_VAR( in64, pi[ 64 ] );
368 453 : in65 = GF_MUL_VAR( in65, pi[ 65 ] );
369 453 : in66 = GF_MUL_VAR( in66, pi[ 66 ] );
370 453 : in67 = GF_MUL_VAR( in67, pi[ 67 ] );
371 453 : in68 = GF_MUL_VAR( in68, pi[ 68 ] );
372 453 : in69 = GF_MUL_VAR( in69, pi[ 69 ] );
373 453 : in70 = GF_MUL_VAR( in70, pi[ 70 ] );
374 453 : in71 = GF_MUL_VAR( in71, pi[ 71 ] );
375 453 : in72 = GF_MUL_VAR( in72, pi[ 72 ] );
376 453 : in73 = GF_MUL_VAR( in73, pi[ 73 ] );
377 453 : in74 = GF_MUL_VAR( in74, pi[ 74 ] );
378 453 : in75 = GF_MUL_VAR( in75, pi[ 75 ] );
379 453 : in76 = GF_MUL_VAR( in76, pi[ 76 ] );
380 453 : in77 = GF_MUL_VAR( in77, pi[ 77 ] );
381 453 : in78 = GF_MUL_VAR( in78, pi[ 78 ] );
382 453 : in79 = GF_MUL_VAR( in79, pi[ 79 ] );
383 453 : in80 = GF_MUL_VAR( in80, pi[ 80 ] );
384 453 : in81 = GF_MUL_VAR( in81, pi[ 81 ] );
385 453 : in82 = GF_MUL_VAR( in82, pi[ 82 ] );
386 453 : in83 = GF_MUL_VAR( in83, pi[ 83 ] );
387 453 : in84 = GF_MUL_VAR( in84, pi[ 84 ] );
388 453 : in85 = GF_MUL_VAR( in85, pi[ 85 ] );
389 453 : in86 = GF_MUL_VAR( in86, pi[ 86 ] );
390 453 : in87 = GF_MUL_VAR( in87, pi[ 87 ] );
391 453 : in88 = GF_MUL_VAR( in88, pi[ 88 ] );
392 453 : in89 = GF_MUL_VAR( in89, pi[ 89 ] );
393 453 : in90 = GF_MUL_VAR( in90, pi[ 90 ] );
394 453 : in91 = GF_MUL_VAR( in91, pi[ 91 ] );
395 453 : in92 = GF_MUL_VAR( in92, pi[ 92 ] );
396 453 : in93 = GF_MUL_VAR( in93, pi[ 93 ] );
397 453 : in94 = GF_MUL_VAR( in94, pi[ 94 ] );
398 453 : in95 = GF_MUL_VAR( in95, pi[ 95 ] );
399 453 : in96 = GF_MUL_VAR( in96, pi[ 96 ] );
400 453 : in97 = GF_MUL_VAR( in97, pi[ 97 ] );
401 453 : in98 = GF_MUL_VAR( in98, pi[ 98 ] );
402 453 : in99 = GF_MUL_VAR( in99, pi[ 99 ] );
403 453 : in100 = GF_MUL_VAR( in100, pi[ 100 ] );
404 453 : in101 = GF_MUL_VAR( in101, pi[ 101 ] );
405 453 : in102 = GF_MUL_VAR( in102, pi[ 102 ] );
406 453 : in103 = GF_MUL_VAR( in103, pi[ 103 ] );
407 453 : in104 = GF_MUL_VAR( in104, pi[ 104 ] );
408 453 : in105 = GF_MUL_VAR( in105, pi[ 105 ] );
409 453 : in106 = GF_MUL_VAR( in106, pi[ 106 ] );
410 453 : in107 = GF_MUL_VAR( in107, pi[ 107 ] );
411 453 : in108 = GF_MUL_VAR( in108, pi[ 108 ] );
412 453 : in109 = GF_MUL_VAR( in109, pi[ 109 ] );
413 453 : in110 = GF_MUL_VAR( in110, pi[ 110 ] );
414 453 : in111 = GF_MUL_VAR( in111, pi[ 111 ] );
415 453 : in112 = GF_MUL_VAR( in112, pi[ 112 ] );
416 453 : in113 = GF_MUL_VAR( in113, pi[ 113 ] );
417 453 : in114 = GF_MUL_VAR( in114, pi[ 114 ] );
418 453 : in115 = GF_MUL_VAR( in115, pi[ 115 ] );
419 453 : in116 = GF_MUL_VAR( in116, pi[ 116 ] );
420 453 : in117 = GF_MUL_VAR( in117, pi[ 117 ] );
421 453 : in118 = GF_MUL_VAR( in118, pi[ 118 ] );
422 453 : in119 = GF_MUL_VAR( in119, pi[ 119 ] );
423 453 : in120 = GF_MUL_VAR( in120, pi[ 120 ] );
424 453 : in121 = GF_MUL_VAR( in121, pi[ 121 ] );
425 453 : in122 = GF_MUL_VAR( in122, pi[ 122 ] );
426 453 : in123 = GF_MUL_VAR( in123, pi[ 123 ] );
427 453 : in124 = GF_MUL_VAR( in124, pi[ 124 ] );
428 453 : in125 = GF_MUL_VAR( in125, pi[ 125 ] );
429 453 : in126 = GF_MUL_VAR( in126, pi[ 126 ] );
430 453 : in127 = GF_MUL_VAR( in127, pi[ 127 ] );
431 : /* There are a couple of cases we have to handle:
432 : - If i<shred_cnt and erased[ i ], it's an actual erasure, so we
433 : need to store the generated value.
434 : - If i<shred_cnt and _erased[ i ] but not erased[ i ], it was a
435 : value that we ignored to ensure the data lies on a
436 : polynomial of the right order, so we need to compare the
437 : value we generated to the one that was there.
438 : - If i<shred_cnt and !_erased[ i ], then this is a value we
439 : actually used in the computation, but we destroyed it, so we
440 : need to reload the actual value of the shred in order to use the
441 : IFFT in the next step.
442 : - If i>=shred_cnt, do nothing, which will keep the value of the
443 : shred if it existed in the variable. */
444 36702 : #define STORE_COMPARE_RELOAD( n, var ) do{ \
445 36702 : if( erased[ n ] ) gf_stu( shred[ n ] + shred_pos, var ); \
446 36702 : else if( _erased[ n ] ) diff = GF_OR( diff, GF_ADD( var, gf_ldu( shred[ n ] + shred_pos ) ) ); \
447 18351 : else var = gf_ldu( shred[ n ] + shred_pos ); \
448 36702 : } while( 0 )
449 453 : #define STORE_COMPARE( n, var ) do{ \
450 0 : if( erased[ n ] ) gf_stu( shred[ n ] + shred_pos, var ); \
451 0 : else diff = GF_OR( diff, GF_ADD( var, gf_ldu( shred[ n ] + shred_pos ) ) ); \
452 0 : } while( 0 )
453 453 : switch( fd_ulong_min( shred_cnt, 128UL ) ) {
454 0 : case 128UL: STORE_COMPARE_RELOAD( 127, in127 ); FALLTHRU
455 0 : case 127UL: STORE_COMPARE_RELOAD( 126, in126 ); FALLTHRU
456 0 : case 126UL: STORE_COMPARE_RELOAD( 125, in125 ); FALLTHRU
457 0 : case 125UL: STORE_COMPARE_RELOAD( 124, in124 ); FALLTHRU
458 0 : case 124UL: STORE_COMPARE_RELOAD( 123, in123 ); FALLTHRU
459 0 : case 123UL: STORE_COMPARE_RELOAD( 122, in122 ); FALLTHRU
460 0 : case 122UL: STORE_COMPARE_RELOAD( 121, in121 ); FALLTHRU
461 0 : case 121UL: STORE_COMPARE_RELOAD( 120, in120 ); FALLTHRU
462 0 : case 120UL: STORE_COMPARE_RELOAD( 119, in119 ); FALLTHRU
463 0 : case 119UL: STORE_COMPARE_RELOAD( 118, in118 ); FALLTHRU
464 0 : case 118UL: STORE_COMPARE_RELOAD( 117, in117 ); FALLTHRU
465 0 : case 117UL: STORE_COMPARE_RELOAD( 116, in116 ); FALLTHRU
466 0 : case 116UL: STORE_COMPARE_RELOAD( 115, in115 ); FALLTHRU
467 0 : case 115UL: STORE_COMPARE_RELOAD( 114, in114 ); FALLTHRU
468 0 : case 114UL: STORE_COMPARE_RELOAD( 113, in113 ); FALLTHRU
469 0 : case 113UL: STORE_COMPARE_RELOAD( 112, in112 ); FALLTHRU
470 0 : case 112UL: STORE_COMPARE_RELOAD( 111, in111 ); FALLTHRU
471 0 : case 111UL: STORE_COMPARE_RELOAD( 110, in110 ); FALLTHRU
472 0 : case 110UL: STORE_COMPARE_RELOAD( 109, in109 ); FALLTHRU
473 0 : case 109UL: STORE_COMPARE_RELOAD( 108, in108 ); FALLTHRU
474 0 : case 108UL: STORE_COMPARE_RELOAD( 107, in107 ); FALLTHRU
475 0 : case 107UL: STORE_COMPARE_RELOAD( 106, in106 ); FALLTHRU
476 0 : case 106UL: STORE_COMPARE_RELOAD( 105, in105 ); FALLTHRU
477 0 : case 105UL: STORE_COMPARE_RELOAD( 104, in104 ); FALLTHRU
478 0 : case 104UL: STORE_COMPARE_RELOAD( 103, in103 ); FALLTHRU
479 0 : case 103UL: STORE_COMPARE_RELOAD( 102, in102 ); FALLTHRU
480 0 : case 102UL: STORE_COMPARE_RELOAD( 101, in101 ); FALLTHRU
481 0 : case 101UL: STORE_COMPARE_RELOAD( 100, in100 ); FALLTHRU
482 0 : case 100UL: STORE_COMPARE_RELOAD( 99, in99 ); FALLTHRU
483 0 : case 99UL: STORE_COMPARE_RELOAD( 98, in98 ); FALLTHRU
484 0 : case 98UL: STORE_COMPARE_RELOAD( 97, in97 ); FALLTHRU
485 0 : case 97UL: STORE_COMPARE_RELOAD( 96, in96 ); FALLTHRU
486 192 : case 96UL: STORE_COMPARE_RELOAD( 95, in95 ); FALLTHRU
487 192 : case 95UL: STORE_COMPARE_RELOAD( 94, in94 ); FALLTHRU
488 192 : case 94UL: STORE_COMPARE_RELOAD( 93, in93 ); FALLTHRU
489 192 : case 93UL: STORE_COMPARE_RELOAD( 92, in92 ); FALLTHRU
490 192 : case 92UL: STORE_COMPARE_RELOAD( 91, in91 ); FALLTHRU
491 192 : case 91UL: STORE_COMPARE_RELOAD( 90, in90 ); FALLTHRU
492 192 : case 90UL: STORE_COMPARE_RELOAD( 89, in89 ); FALLTHRU
493 192 : case 89UL: STORE_COMPARE_RELOAD( 88, in88 ); FALLTHRU
494 192 : case 88UL: STORE_COMPARE_RELOAD( 87, in87 ); FALLTHRU
495 192 : case 87UL: STORE_COMPARE_RELOAD( 86, in86 ); FALLTHRU
496 192 : case 86UL: STORE_COMPARE_RELOAD( 85, in85 ); FALLTHRU
497 192 : case 85UL: STORE_COMPARE_RELOAD( 84, in84 ); FALLTHRU
498 192 : case 84UL: STORE_COMPARE_RELOAD( 83, in83 ); FALLTHRU
499 192 : case 83UL: STORE_COMPARE_RELOAD( 82, in82 ); FALLTHRU
500 192 : case 82UL: STORE_COMPARE_RELOAD( 81, in81 ); FALLTHRU
501 192 : case 81UL: STORE_COMPARE_RELOAD( 80, in80 ); FALLTHRU
502 192 : case 80UL: STORE_COMPARE_RELOAD( 79, in79 ); FALLTHRU
503 192 : case 79UL: STORE_COMPARE_RELOAD( 78, in78 ); FALLTHRU
504 192 : case 78UL: STORE_COMPARE_RELOAD( 77, in77 ); FALLTHRU
505 192 : case 77UL: STORE_COMPARE_RELOAD( 76, in76 ); FALLTHRU
506 192 : case 76UL: STORE_COMPARE_RELOAD( 75, in75 ); FALLTHRU
507 192 : case 75UL: STORE_COMPARE_RELOAD( 74, in74 ); FALLTHRU
508 192 : case 74UL: STORE_COMPARE_RELOAD( 73, in73 ); FALLTHRU
509 192 : case 73UL: STORE_COMPARE_RELOAD( 72, in72 ); FALLTHRU
510 192 : case 72UL: STORE_COMPARE_RELOAD( 71, in71 ); FALLTHRU
511 192 : case 71UL: STORE_COMPARE_RELOAD( 70, in70 ); FALLTHRU
512 453 : case 70UL: STORE_COMPARE_RELOAD( 69, in69 ); FALLTHRU
513 453 : case 69UL: STORE_COMPARE_RELOAD( 68, in68 ); FALLTHRU
514 453 : case 68UL: STORE_COMPARE_RELOAD( 67, in67 ); FALLTHRU
515 453 : case 67UL: STORE_COMPARE_RELOAD( 66, in66 ); FALLTHRU
516 453 : case 66UL: STORE_COMPARE_RELOAD( 65, in65 ); FALLTHRU
517 453 : case 65UL: STORE_COMPARE_RELOAD( 64, in64 ); FALLTHRU
518 453 : case 64UL: STORE_COMPARE_RELOAD( 63, in63 ); FALLTHRU
519 453 : case 63UL: STORE_COMPARE_RELOAD( 62, in62 ); FALLTHRU
520 453 : case 62UL: STORE_COMPARE_RELOAD( 61, in61 ); FALLTHRU
521 453 : case 61UL: STORE_COMPARE_RELOAD( 60, in60 ); FALLTHRU
522 453 : case 60UL: STORE_COMPARE_RELOAD( 59, in59 ); FALLTHRU
523 453 : case 59UL: STORE_COMPARE_RELOAD( 58, in58 ); FALLTHRU
524 453 : case 58UL: STORE_COMPARE_RELOAD( 57, in57 ); FALLTHRU
525 453 : case 57UL: STORE_COMPARE_RELOAD( 56, in56 ); FALLTHRU
526 453 : case 56UL: STORE_COMPARE_RELOAD( 55, in55 ); FALLTHRU
527 453 : case 55UL: STORE_COMPARE_RELOAD( 54, in54 ); FALLTHRU
528 453 : case 54UL: STORE_COMPARE_RELOAD( 53, in53 ); FALLTHRU
529 453 : case 53UL: STORE_COMPARE_RELOAD( 52, in52 ); FALLTHRU
530 453 : case 52UL: STORE_COMPARE_RELOAD( 51, in51 ); FALLTHRU
531 453 : case 51UL: STORE_COMPARE_RELOAD( 50, in50 ); FALLTHRU
532 453 : case 50UL: STORE_COMPARE_RELOAD( 49, in49 ); FALLTHRU
533 453 : case 49UL: STORE_COMPARE_RELOAD( 48, in48 ); FALLTHRU
534 453 : case 48UL: STORE_COMPARE_RELOAD( 47, in47 ); FALLTHRU
535 453 : case 47UL: STORE_COMPARE_RELOAD( 46, in46 ); FALLTHRU
536 453 : case 46UL: STORE_COMPARE_RELOAD( 45, in45 ); FALLTHRU
537 453 : case 45UL: STORE_COMPARE_RELOAD( 44, in44 ); FALLTHRU
538 453 : case 44UL: STORE_COMPARE_RELOAD( 43, in43 ); FALLTHRU
539 453 : case 43UL: STORE_COMPARE_RELOAD( 42, in42 ); FALLTHRU
540 453 : case 42UL: STORE_COMPARE_RELOAD( 41, in41 ); FALLTHRU
541 453 : case 41UL: STORE_COMPARE_RELOAD( 40, in40 ); FALLTHRU
542 453 : case 40UL: STORE_COMPARE_RELOAD( 39, in39 ); FALLTHRU
543 453 : case 39UL: STORE_COMPARE_RELOAD( 38, in38 ); FALLTHRU
544 453 : case 38UL: STORE_COMPARE_RELOAD( 37, in37 ); FALLTHRU
545 453 : case 37UL: STORE_COMPARE_RELOAD( 36, in36 ); FALLTHRU
546 453 : case 36UL: STORE_COMPARE_RELOAD( 35, in35 ); FALLTHRU
547 453 : case 35UL: STORE_COMPARE_RELOAD( 34, in34 ); FALLTHRU
548 453 : case 34UL: STORE_COMPARE_RELOAD( 33, in33 ); FALLTHRU
549 453 : case 33UL: STORE_COMPARE_RELOAD( 32, in32 ); FALLTHRU
550 453 : case 32UL: STORE_COMPARE_RELOAD( 31, in31 ); FALLTHRU
551 453 : case 31UL: STORE_COMPARE_RELOAD( 30, in30 ); FALLTHRU
552 453 : case 30UL: STORE_COMPARE_RELOAD( 29, in29 ); FALLTHRU
553 453 : case 29UL: STORE_COMPARE_RELOAD( 28, in28 ); FALLTHRU
554 453 : case 28UL: STORE_COMPARE_RELOAD( 27, in27 ); FALLTHRU
555 453 : case 27UL: STORE_COMPARE_RELOAD( 26, in26 ); FALLTHRU
556 453 : case 26UL: STORE_COMPARE_RELOAD( 25, in25 ); FALLTHRU
557 453 : case 25UL: STORE_COMPARE_RELOAD( 24, in24 ); FALLTHRU
558 453 : case 24UL: STORE_COMPARE_RELOAD( 23, in23 ); FALLTHRU
559 453 : case 23UL: STORE_COMPARE_RELOAD( 22, in22 ); FALLTHRU
560 453 : case 22UL: STORE_COMPARE_RELOAD( 21, in21 ); FALLTHRU
561 453 : case 21UL: STORE_COMPARE_RELOAD( 20, in20 ); FALLTHRU
562 453 : case 20UL: STORE_COMPARE_RELOAD( 19, in19 ); FALLTHRU
563 453 : case 19UL: STORE_COMPARE_RELOAD( 18, in18 ); FALLTHRU
564 453 : case 18UL: STORE_COMPARE_RELOAD( 17, in17 ); FALLTHRU
565 453 : case 17UL: STORE_COMPARE_RELOAD( 16, in16 ); FALLTHRU
566 453 : case 16UL: STORE_COMPARE_RELOAD( 15, in15 ); FALLTHRU
567 453 : case 15UL: STORE_COMPARE_RELOAD( 14, in14 ); FALLTHRU
568 453 : case 14UL: STORE_COMPARE_RELOAD( 13, in13 ); FALLTHRU
569 453 : case 13UL: STORE_COMPARE_RELOAD( 12, in12 ); FALLTHRU
570 453 : case 12UL: STORE_COMPARE_RELOAD( 11, in11 ); FALLTHRU
571 453 : case 11UL: STORE_COMPARE_RELOAD( 10, in10 ); FALLTHRU
572 453 : case 10UL: STORE_COMPARE_RELOAD( 9, in09 ); FALLTHRU
573 453 : case 9UL: STORE_COMPARE_RELOAD( 8, in08 ); FALLTHRU
574 453 : case 8UL: STORE_COMPARE_RELOAD( 7, in07 ); FALLTHRU
575 453 : case 7UL: STORE_COMPARE_RELOAD( 6, in06 ); FALLTHRU
576 453 : case 6UL: STORE_COMPARE_RELOAD( 5, in05 ); FALLTHRU
577 453 : case 5UL: STORE_COMPARE_RELOAD( 4, in04 ); FALLTHRU
578 453 : case 4UL: STORE_COMPARE_RELOAD( 3, in03 ); FALLTHRU
579 453 : case 3UL: STORE_COMPARE_RELOAD( 2, in02 ); FALLTHRU
580 453 : case 2UL: STORE_COMPARE_RELOAD( 1, in01 ); FALLTHRU
581 453 : case 1UL: STORE_COMPARE_RELOAD( 0, in00 );
582 453 : }
583 :
584 453 : ulong shreds_remaining = shred_cnt-fd_ulong_min( shred_cnt, 128UL );
585 453 : if( shreds_remaining>0UL ) {
586 0 : FD_REEDSOL_GENERATE_IFFT( 128, 0, ALL_VARS );
587 0 : FD_REEDSOL_GENERATE_FFT( 128, 128, ALL_VARS );
588 :
589 0 : switch( fd_ulong_min( shreds_remaining, 128UL ) ) {
590 0 : case 7UL: STORE_COMPARE( 134, in06 ); FALLTHRU
591 0 : case 6UL: STORE_COMPARE( 133, in05 ); FALLTHRU
592 0 : case 5UL: STORE_COMPARE( 132, in04 ); FALLTHRU
593 0 : case 4UL: STORE_COMPARE( 131, in03 ); FALLTHRU
594 0 : case 3UL: STORE_COMPARE( 130, in02 ); FALLTHRU
595 0 : case 2UL: STORE_COMPARE( 129, in01 ); FALLTHRU
596 0 : case 1UL: STORE_COMPARE( 128, in00 );
597 0 : }
598 0 : shreds_remaining -= fd_ulong_min( shreds_remaining, 128UL );
599 0 : }
600 453 : if( FD_UNLIKELY( GF_ANY( diff ) ) ) return FD_REEDSOL_ERR_CORRUPT;
601 453 : shred_pos += GF_WIDTH;
602 453 : shred_pos = fd_ulong_if( ((shred_sz-GF_WIDTH)<shred_pos) & (shred_pos<shred_sz), shred_sz-GF_WIDTH, shred_pos );
603 453 : }
604 15 : return FD_REEDSOL_SUCCESS;
605 15 : }
|