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 0 : uchar const * erased ) {
11 0 : uchar _erased[ 128 ] W_ATTR;
12 0 : uchar pi[ 128 ] W_ATTR;
13 0 : ulong shred_cnt = data_shred_cnt + parity_shred_cnt;
14 0 : ulong loaded_cnt = 0UL;
15 0 : for( ulong i=0UL; i<128UL; i++) {
16 0 : int load_shred = ((i<shred_cnt)&(loaded_cnt<data_shred_cnt))&&( erased[ i ]==0 );
17 0 : _erased[ i ] = !load_shred;
18 0 : loaded_cnt += (ulong)load_shred;
19 0 : }
20 0 : if( FD_UNLIKELY( loaded_cnt<data_shred_cnt ) ) return FD_REEDSOL_ERR_PARTIAL;
21 :
22 0 : 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 0 : gf_t diff = gf_zero();
27 :
28 0 : 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 0 : gf_t in00 = _erased[ 0 ] ? gf_zero() : gf_ldu( shred[ 0 ] + shred_pos );
32 0 : gf_t in01 = _erased[ 1 ] ? gf_zero() : gf_ldu( shred[ 1 ] + shred_pos );
33 0 : gf_t in02 = _erased[ 2 ] ? gf_zero() : gf_ldu( shred[ 2 ] + shred_pos );
34 0 : gf_t in03 = _erased[ 3 ] ? gf_zero() : gf_ldu( shred[ 3 ] + shred_pos );
35 0 : gf_t in04 = _erased[ 4 ] ? gf_zero() : gf_ldu( shred[ 4 ] + shred_pos );
36 0 : gf_t in05 = _erased[ 5 ] ? gf_zero() : gf_ldu( shred[ 5 ] + shred_pos );
37 0 : gf_t in06 = _erased[ 6 ] ? gf_zero() : gf_ldu( shred[ 6 ] + shred_pos );
38 0 : gf_t in07 = _erased[ 7 ] ? gf_zero() : gf_ldu( shred[ 7 ] + shred_pos );
39 0 : gf_t in08 = _erased[ 8 ] ? gf_zero() : gf_ldu( shred[ 8 ] + shred_pos );
40 0 : gf_t in09 = _erased[ 9 ] ? gf_zero() : gf_ldu( shred[ 9 ] + shred_pos );
41 0 : gf_t in10 = _erased[ 10 ] ? gf_zero() : gf_ldu( shred[ 10 ] + shred_pos );
42 0 : gf_t in11 = _erased[ 11 ] ? gf_zero() : gf_ldu( shred[ 11 ] + shred_pos );
43 0 : gf_t in12 = _erased[ 12 ] ? gf_zero() : gf_ldu( shred[ 12 ] + shred_pos );
44 0 : gf_t in13 = _erased[ 13 ] ? gf_zero() : gf_ldu( shred[ 13 ] + shred_pos );
45 0 : gf_t in14 = _erased[ 14 ] ? gf_zero() : gf_ldu( shred[ 14 ] + shred_pos );
46 0 : gf_t in15 = _erased[ 15 ] ? gf_zero() : gf_ldu( shred[ 15 ] + shred_pos );
47 0 : gf_t in16 = _erased[ 16 ] ? gf_zero() : gf_ldu( shred[ 16 ] + shred_pos );
48 0 : gf_t in17 = _erased[ 17 ] ? gf_zero() : gf_ldu( shred[ 17 ] + shred_pos );
49 0 : gf_t in18 = _erased[ 18 ] ? gf_zero() : gf_ldu( shred[ 18 ] + shred_pos );
50 0 : gf_t in19 = _erased[ 19 ] ? gf_zero() : gf_ldu( shred[ 19 ] + shred_pos );
51 0 : gf_t in20 = _erased[ 20 ] ? gf_zero() : gf_ldu( shred[ 20 ] + shred_pos );
52 0 : gf_t in21 = _erased[ 21 ] ? gf_zero() : gf_ldu( shred[ 21 ] + shred_pos );
53 0 : gf_t in22 = _erased[ 22 ] ? gf_zero() : gf_ldu( shred[ 22 ] + shred_pos );
54 0 : gf_t in23 = _erased[ 23 ] ? gf_zero() : gf_ldu( shred[ 23 ] + shred_pos );
55 0 : gf_t in24 = _erased[ 24 ] ? gf_zero() : gf_ldu( shred[ 24 ] + shred_pos );
56 0 : gf_t in25 = _erased[ 25 ] ? gf_zero() : gf_ldu( shred[ 25 ] + shred_pos );
57 0 : gf_t in26 = _erased[ 26 ] ? gf_zero() : gf_ldu( shred[ 26 ] + shred_pos );
58 0 : gf_t in27 = _erased[ 27 ] ? gf_zero() : gf_ldu( shred[ 27 ] + shred_pos );
59 0 : gf_t in28 = _erased[ 28 ] ? gf_zero() : gf_ldu( shred[ 28 ] + shred_pos );
60 0 : gf_t in29 = _erased[ 29 ] ? gf_zero() : gf_ldu( shred[ 29 ] + shred_pos );
61 0 : gf_t in30 = _erased[ 30 ] ? gf_zero() : gf_ldu( shred[ 30 ] + shred_pos );
62 0 : gf_t in31 = _erased[ 31 ] ? gf_zero() : gf_ldu( shred[ 31 ] + shred_pos );
63 0 : gf_t in32 = _erased[ 32 ] ? gf_zero() : gf_ldu( shred[ 32 ] + shred_pos );
64 0 : gf_t in33 = _erased[ 33 ] ? gf_zero() : gf_ldu( shred[ 33 ] + shred_pos );
65 0 : gf_t in34 = _erased[ 34 ] ? gf_zero() : gf_ldu( shred[ 34 ] + shred_pos );
66 0 : gf_t in35 = _erased[ 35 ] ? gf_zero() : gf_ldu( shred[ 35 ] + shred_pos );
67 0 : gf_t in36 = _erased[ 36 ] ? gf_zero() : gf_ldu( shred[ 36 ] + shred_pos );
68 0 : gf_t in37 = _erased[ 37 ] ? gf_zero() : gf_ldu( shred[ 37 ] + shred_pos );
69 0 : gf_t in38 = _erased[ 38 ] ? gf_zero() : gf_ldu( shred[ 38 ] + shred_pos );
70 0 : gf_t in39 = _erased[ 39 ] ? gf_zero() : gf_ldu( shred[ 39 ] + shred_pos );
71 0 : gf_t in40 = _erased[ 40 ] ? gf_zero() : gf_ldu( shred[ 40 ] + shred_pos );
72 0 : gf_t in41 = _erased[ 41 ] ? gf_zero() : gf_ldu( shred[ 41 ] + shred_pos );
73 0 : gf_t in42 = _erased[ 42 ] ? gf_zero() : gf_ldu( shred[ 42 ] + shred_pos );
74 0 : gf_t in43 = _erased[ 43 ] ? gf_zero() : gf_ldu( shred[ 43 ] + shred_pos );
75 0 : gf_t in44 = _erased[ 44 ] ? gf_zero() : gf_ldu( shred[ 44 ] + shred_pos );
76 0 : gf_t in45 = _erased[ 45 ] ? gf_zero() : gf_ldu( shred[ 45 ] + shred_pos );
77 0 : gf_t in46 = _erased[ 46 ] ? gf_zero() : gf_ldu( shred[ 46 ] + shred_pos );
78 0 : gf_t in47 = _erased[ 47 ] ? gf_zero() : gf_ldu( shred[ 47 ] + shred_pos );
79 0 : gf_t in48 = _erased[ 48 ] ? gf_zero() : gf_ldu( shred[ 48 ] + shred_pos );
80 0 : gf_t in49 = _erased[ 49 ] ? gf_zero() : gf_ldu( shred[ 49 ] + shred_pos );
81 0 : gf_t in50 = _erased[ 50 ] ? gf_zero() : gf_ldu( shred[ 50 ] + shred_pos );
82 0 : gf_t in51 = _erased[ 51 ] ? gf_zero() : gf_ldu( shred[ 51 ] + shred_pos );
83 0 : gf_t in52 = _erased[ 52 ] ? gf_zero() : gf_ldu( shred[ 52 ] + shred_pos );
84 0 : gf_t in53 = _erased[ 53 ] ? gf_zero() : gf_ldu( shred[ 53 ] + shred_pos );
85 0 : gf_t in54 = _erased[ 54 ] ? gf_zero() : gf_ldu( shred[ 54 ] + shred_pos );
86 0 : gf_t in55 = _erased[ 55 ] ? gf_zero() : gf_ldu( shred[ 55 ] + shred_pos );
87 0 : gf_t in56 = _erased[ 56 ] ? gf_zero() : gf_ldu( shred[ 56 ] + shred_pos );
88 0 : gf_t in57 = _erased[ 57 ] ? gf_zero() : gf_ldu( shred[ 57 ] + shred_pos );
89 0 : gf_t in58 = _erased[ 58 ] ? gf_zero() : gf_ldu( shred[ 58 ] + shred_pos );
90 0 : gf_t in59 = _erased[ 59 ] ? gf_zero() : gf_ldu( shred[ 59 ] + shred_pos );
91 0 : gf_t in60 = _erased[ 60 ] ? gf_zero() : gf_ldu( shred[ 60 ] + shred_pos );
92 0 : gf_t in61 = _erased[ 61 ] ? gf_zero() : gf_ldu( shred[ 61 ] + shred_pos );
93 0 : gf_t in62 = _erased[ 62 ] ? gf_zero() : gf_ldu( shred[ 62 ] + shred_pos );
94 0 : gf_t in63 = _erased[ 63 ] ? gf_zero() : gf_ldu( shred[ 63 ] + shred_pos );
95 0 : gf_t in64 = _erased[ 64 ] ? gf_zero() : gf_ldu( shred[ 64 ] + shred_pos );
96 0 : gf_t in65 = _erased[ 65 ] ? gf_zero() : gf_ldu( shred[ 65 ] + shred_pos );
97 0 : gf_t in66 = _erased[ 66 ] ? gf_zero() : gf_ldu( shred[ 66 ] + shred_pos );
98 0 : gf_t in67 = _erased[ 67 ] ? gf_zero() : gf_ldu( shred[ 67 ] + shred_pos );
99 0 : gf_t in68 = _erased[ 68 ] ? gf_zero() : gf_ldu( shred[ 68 ] + shred_pos );
100 0 : gf_t in69 = _erased[ 69 ] ? gf_zero() : gf_ldu( shred[ 69 ] + shred_pos );
101 0 : gf_t in70 = _erased[ 70 ] ? gf_zero() : gf_ldu( shred[ 70 ] + shred_pos );
102 0 : gf_t in71 = _erased[ 71 ] ? gf_zero() : gf_ldu( shred[ 71 ] + shred_pos );
103 0 : gf_t in72 = _erased[ 72 ] ? gf_zero() : gf_ldu( shred[ 72 ] + shred_pos );
104 0 : gf_t in73 = _erased[ 73 ] ? gf_zero() : gf_ldu( shred[ 73 ] + shred_pos );
105 0 : gf_t in74 = _erased[ 74 ] ? gf_zero() : gf_ldu( shred[ 74 ] + shred_pos );
106 0 : gf_t in75 = _erased[ 75 ] ? gf_zero() : gf_ldu( shred[ 75 ] + shred_pos );
107 0 : gf_t in76 = _erased[ 76 ] ? gf_zero() : gf_ldu( shred[ 76 ] + shred_pos );
108 0 : gf_t in77 = _erased[ 77 ] ? gf_zero() : gf_ldu( shred[ 77 ] + shred_pos );
109 0 : gf_t in78 = _erased[ 78 ] ? gf_zero() : gf_ldu( shred[ 78 ] + shred_pos );
110 0 : gf_t in79 = _erased[ 79 ] ? gf_zero() : gf_ldu( shred[ 79 ] + shred_pos );
111 0 : gf_t in80 = _erased[ 80 ] ? gf_zero() : gf_ldu( shred[ 80 ] + shred_pos );
112 0 : gf_t in81 = _erased[ 81 ] ? gf_zero() : gf_ldu( shred[ 81 ] + shred_pos );
113 0 : gf_t in82 = _erased[ 82 ] ? gf_zero() : gf_ldu( shred[ 82 ] + shred_pos );
114 0 : gf_t in83 = _erased[ 83 ] ? gf_zero() : gf_ldu( shred[ 83 ] + shred_pos );
115 0 : gf_t in84 = _erased[ 84 ] ? gf_zero() : gf_ldu( shred[ 84 ] + shred_pos );
116 0 : gf_t in85 = _erased[ 85 ] ? gf_zero() : gf_ldu( shred[ 85 ] + shred_pos );
117 0 : gf_t in86 = _erased[ 86 ] ? gf_zero() : gf_ldu( shred[ 86 ] + shred_pos );
118 0 : gf_t in87 = _erased[ 87 ] ? gf_zero() : gf_ldu( shred[ 87 ] + shred_pos );
119 0 : gf_t in88 = _erased[ 88 ] ? gf_zero() : gf_ldu( shred[ 88 ] + shred_pos );
120 0 : gf_t in89 = _erased[ 89 ] ? gf_zero() : gf_ldu( shred[ 89 ] + shred_pos );
121 0 : gf_t in90 = _erased[ 90 ] ? gf_zero() : gf_ldu( shred[ 90 ] + shred_pos );
122 0 : gf_t in91 = _erased[ 91 ] ? gf_zero() : gf_ldu( shred[ 91 ] + shred_pos );
123 0 : gf_t in92 = _erased[ 92 ] ? gf_zero() : gf_ldu( shred[ 92 ] + shred_pos );
124 0 : gf_t in93 = _erased[ 93 ] ? gf_zero() : gf_ldu( shred[ 93 ] + shred_pos );
125 0 : gf_t in94 = _erased[ 94 ] ? gf_zero() : gf_ldu( shred[ 94 ] + shred_pos );
126 0 : gf_t in95 = _erased[ 95 ] ? gf_zero() : gf_ldu( shred[ 95 ] + shred_pos );
127 0 : gf_t in96 = _erased[ 96 ] ? gf_zero() : gf_ldu( shred[ 96 ] + shred_pos );
128 0 : gf_t in97 = _erased[ 97 ] ? gf_zero() : gf_ldu( shred[ 97 ] + shred_pos );
129 0 : gf_t in98 = _erased[ 98 ] ? gf_zero() : gf_ldu( shred[ 98 ] + shred_pos );
130 0 : gf_t in99 = _erased[ 99 ] ? gf_zero() : gf_ldu( shred[ 99 ] + shred_pos );
131 0 : gf_t in100 = _erased[ 100 ] ? gf_zero() : gf_ldu( shred[ 100 ] + shred_pos );
132 0 : gf_t in101 = _erased[ 101 ] ? gf_zero() : gf_ldu( shred[ 101 ] + shred_pos );
133 0 : gf_t in102 = _erased[ 102 ] ? gf_zero() : gf_ldu( shred[ 102 ] + shred_pos );
134 0 : gf_t in103 = _erased[ 103 ] ? gf_zero() : gf_ldu( shred[ 103 ] + shred_pos );
135 0 : gf_t in104 = _erased[ 104 ] ? gf_zero() : gf_ldu( shred[ 104 ] + shred_pos );
136 0 : gf_t in105 = _erased[ 105 ] ? gf_zero() : gf_ldu( shred[ 105 ] + shred_pos );
137 0 : gf_t in106 = _erased[ 106 ] ? gf_zero() : gf_ldu( shred[ 106 ] + shred_pos );
138 0 : gf_t in107 = _erased[ 107 ] ? gf_zero() : gf_ldu( shred[ 107 ] + shred_pos );
139 0 : gf_t in108 = _erased[ 108 ] ? gf_zero() : gf_ldu( shred[ 108 ] + shred_pos );
140 0 : gf_t in109 = _erased[ 109 ] ? gf_zero() : gf_ldu( shred[ 109 ] + shred_pos );
141 0 : gf_t in110 = _erased[ 110 ] ? gf_zero() : gf_ldu( shred[ 110 ] + shred_pos );
142 0 : gf_t in111 = _erased[ 111 ] ? gf_zero() : gf_ldu( shred[ 111 ] + shred_pos );
143 0 : gf_t in112 = _erased[ 112 ] ? gf_zero() : gf_ldu( shred[ 112 ] + shred_pos );
144 0 : gf_t in113 = _erased[ 113 ] ? gf_zero() : gf_ldu( shred[ 113 ] + shred_pos );
145 0 : gf_t in114 = _erased[ 114 ] ? gf_zero() : gf_ldu( shred[ 114 ] + shred_pos );
146 0 : gf_t in115 = _erased[ 115 ] ? gf_zero() : gf_ldu( shred[ 115 ] + shred_pos );
147 0 : gf_t in116 = _erased[ 116 ] ? gf_zero() : gf_ldu( shred[ 116 ] + shred_pos );
148 0 : gf_t in117 = _erased[ 117 ] ? gf_zero() : gf_ldu( shred[ 117 ] + shred_pos );
149 0 : gf_t in118 = _erased[ 118 ] ? gf_zero() : gf_ldu( shred[ 118 ] + shred_pos );
150 0 : gf_t in119 = _erased[ 119 ] ? gf_zero() : gf_ldu( shred[ 119 ] + shred_pos );
151 0 : gf_t in120 = _erased[ 120 ] ? gf_zero() : gf_ldu( shred[ 120 ] + shred_pos );
152 0 : gf_t in121 = _erased[ 121 ] ? gf_zero() : gf_ldu( shred[ 121 ] + shred_pos );
153 0 : gf_t in122 = _erased[ 122 ] ? gf_zero() : gf_ldu( shred[ 122 ] + shred_pos );
154 0 : gf_t in123 = _erased[ 123 ] ? gf_zero() : gf_ldu( shred[ 123 ] + shred_pos );
155 0 : gf_t in124 = _erased[ 124 ] ? gf_zero() : gf_ldu( shred[ 124 ] + shred_pos );
156 0 : gf_t in125 = _erased[ 125 ] ? gf_zero() : gf_ldu( shred[ 125 ] + shred_pos );
157 0 : gf_t in126 = _erased[ 126 ] ? gf_zero() : gf_ldu( shred[ 126 ] + shred_pos );
158 0 : 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 0 : in00 = GF_MUL_VAR( in00, pi[ 0 ] );
164 0 : in01 = GF_MUL_VAR( in01, pi[ 1 ] );
165 0 : in02 = GF_MUL_VAR( in02, pi[ 2 ] );
166 0 : in03 = GF_MUL_VAR( in03, pi[ 3 ] );
167 0 : in04 = GF_MUL_VAR( in04, pi[ 4 ] );
168 0 : in05 = GF_MUL_VAR( in05, pi[ 5 ] );
169 0 : in06 = GF_MUL_VAR( in06, pi[ 6 ] );
170 0 : in07 = GF_MUL_VAR( in07, pi[ 7 ] );
171 0 : in08 = GF_MUL_VAR( in08, pi[ 8 ] );
172 0 : in09 = GF_MUL_VAR( in09, pi[ 9 ] );
173 0 : in10 = GF_MUL_VAR( in10, pi[ 10 ] );
174 0 : in11 = GF_MUL_VAR( in11, pi[ 11 ] );
175 0 : in12 = GF_MUL_VAR( in12, pi[ 12 ] );
176 0 : in13 = GF_MUL_VAR( in13, pi[ 13 ] );
177 0 : in14 = GF_MUL_VAR( in14, pi[ 14 ] );
178 0 : in15 = GF_MUL_VAR( in15, pi[ 15 ] );
179 0 : in16 = GF_MUL_VAR( in16, pi[ 16 ] );
180 0 : in17 = GF_MUL_VAR( in17, pi[ 17 ] );
181 0 : in18 = GF_MUL_VAR( in18, pi[ 18 ] );
182 0 : in19 = GF_MUL_VAR( in19, pi[ 19 ] );
183 0 : in20 = GF_MUL_VAR( in20, pi[ 20 ] );
184 0 : in21 = GF_MUL_VAR( in21, pi[ 21 ] );
185 0 : in22 = GF_MUL_VAR( in22, pi[ 22 ] );
186 0 : in23 = GF_MUL_VAR( in23, pi[ 23 ] );
187 0 : in24 = GF_MUL_VAR( in24, pi[ 24 ] );
188 0 : in25 = GF_MUL_VAR( in25, pi[ 25 ] );
189 0 : in26 = GF_MUL_VAR( in26, pi[ 26 ] );
190 0 : in27 = GF_MUL_VAR( in27, pi[ 27 ] );
191 0 : in28 = GF_MUL_VAR( in28, pi[ 28 ] );
192 0 : in29 = GF_MUL_VAR( in29, pi[ 29 ] );
193 0 : in30 = GF_MUL_VAR( in30, pi[ 30 ] );
194 0 : in31 = GF_MUL_VAR( in31, pi[ 31 ] );
195 0 : in32 = GF_MUL_VAR( in32, pi[ 32 ] );
196 0 : in33 = GF_MUL_VAR( in33, pi[ 33 ] );
197 0 : in34 = GF_MUL_VAR( in34, pi[ 34 ] );
198 0 : in35 = GF_MUL_VAR( in35, pi[ 35 ] );
199 0 : in36 = GF_MUL_VAR( in36, pi[ 36 ] );
200 0 : in37 = GF_MUL_VAR( in37, pi[ 37 ] );
201 0 : in38 = GF_MUL_VAR( in38, pi[ 38 ] );
202 0 : in39 = GF_MUL_VAR( in39, pi[ 39 ] );
203 0 : in40 = GF_MUL_VAR( in40, pi[ 40 ] );
204 0 : in41 = GF_MUL_VAR( in41, pi[ 41 ] );
205 0 : in42 = GF_MUL_VAR( in42, pi[ 42 ] );
206 0 : in43 = GF_MUL_VAR( in43, pi[ 43 ] );
207 0 : in44 = GF_MUL_VAR( in44, pi[ 44 ] );
208 0 : in45 = GF_MUL_VAR( in45, pi[ 45 ] );
209 0 : in46 = GF_MUL_VAR( in46, pi[ 46 ] );
210 0 : in47 = GF_MUL_VAR( in47, pi[ 47 ] );
211 0 : in48 = GF_MUL_VAR( in48, pi[ 48 ] );
212 0 : in49 = GF_MUL_VAR( in49, pi[ 49 ] );
213 0 : in50 = GF_MUL_VAR( in50, pi[ 50 ] );
214 0 : in51 = GF_MUL_VAR( in51, pi[ 51 ] );
215 0 : in52 = GF_MUL_VAR( in52, pi[ 52 ] );
216 0 : in53 = GF_MUL_VAR( in53, pi[ 53 ] );
217 0 : in54 = GF_MUL_VAR( in54, pi[ 54 ] );
218 0 : in55 = GF_MUL_VAR( in55, pi[ 55 ] );
219 0 : in56 = GF_MUL_VAR( in56, pi[ 56 ] );
220 0 : in57 = GF_MUL_VAR( in57, pi[ 57 ] );
221 0 : in58 = GF_MUL_VAR( in58, pi[ 58 ] );
222 0 : in59 = GF_MUL_VAR( in59, pi[ 59 ] );
223 0 : in60 = GF_MUL_VAR( in60, pi[ 60 ] );
224 0 : in61 = GF_MUL_VAR( in61, pi[ 61 ] );
225 0 : in62 = GF_MUL_VAR( in62, pi[ 62 ] );
226 0 : in63 = GF_MUL_VAR( in63, pi[ 63 ] );
227 0 : in64 = GF_MUL_VAR( in64, pi[ 64 ] );
228 0 : in65 = GF_MUL_VAR( in65, pi[ 65 ] );
229 0 : in66 = GF_MUL_VAR( in66, pi[ 66 ] );
230 0 : in67 = GF_MUL_VAR( in67, pi[ 67 ] );
231 0 : in68 = GF_MUL_VAR( in68, pi[ 68 ] );
232 0 : in69 = GF_MUL_VAR( in69, pi[ 69 ] );
233 0 : in70 = GF_MUL_VAR( in70, pi[ 70 ] );
234 0 : in71 = GF_MUL_VAR( in71, pi[ 71 ] );
235 0 : in72 = GF_MUL_VAR( in72, pi[ 72 ] );
236 0 : in73 = GF_MUL_VAR( in73, pi[ 73 ] );
237 0 : in74 = GF_MUL_VAR( in74, pi[ 74 ] );
238 0 : in75 = GF_MUL_VAR( in75, pi[ 75 ] );
239 0 : in76 = GF_MUL_VAR( in76, pi[ 76 ] );
240 0 : in77 = GF_MUL_VAR( in77, pi[ 77 ] );
241 0 : in78 = GF_MUL_VAR( in78, pi[ 78 ] );
242 0 : in79 = GF_MUL_VAR( in79, pi[ 79 ] );
243 0 : in80 = GF_MUL_VAR( in80, pi[ 80 ] );
244 0 : in81 = GF_MUL_VAR( in81, pi[ 81 ] );
245 0 : in82 = GF_MUL_VAR( in82, pi[ 82 ] );
246 0 : in83 = GF_MUL_VAR( in83, pi[ 83 ] );
247 0 : in84 = GF_MUL_VAR( in84, pi[ 84 ] );
248 0 : in85 = GF_MUL_VAR( in85, pi[ 85 ] );
249 0 : in86 = GF_MUL_VAR( in86, pi[ 86 ] );
250 0 : in87 = GF_MUL_VAR( in87, pi[ 87 ] );
251 0 : in88 = GF_MUL_VAR( in88, pi[ 88 ] );
252 0 : in89 = GF_MUL_VAR( in89, pi[ 89 ] );
253 0 : in90 = GF_MUL_VAR( in90, pi[ 90 ] );
254 0 : in91 = GF_MUL_VAR( in91, pi[ 91 ] );
255 0 : in92 = GF_MUL_VAR( in92, pi[ 92 ] );
256 0 : in93 = GF_MUL_VAR( in93, pi[ 93 ] );
257 0 : in94 = GF_MUL_VAR( in94, pi[ 94 ] );
258 0 : in95 = GF_MUL_VAR( in95, pi[ 95 ] );
259 0 : in96 = GF_MUL_VAR( in96, pi[ 96 ] );
260 0 : in97 = GF_MUL_VAR( in97, pi[ 97 ] );
261 0 : in98 = GF_MUL_VAR( in98, pi[ 98 ] );
262 0 : in99 = GF_MUL_VAR( in99, pi[ 99 ] );
263 0 : in100 = GF_MUL_VAR( in100, pi[ 100 ] );
264 0 : in101 = GF_MUL_VAR( in101, pi[ 101 ] );
265 0 : in102 = GF_MUL_VAR( in102, pi[ 102 ] );
266 0 : in103 = GF_MUL_VAR( in103, pi[ 103 ] );
267 0 : in104 = GF_MUL_VAR( in104, pi[ 104 ] );
268 0 : in105 = GF_MUL_VAR( in105, pi[ 105 ] );
269 0 : in106 = GF_MUL_VAR( in106, pi[ 106 ] );
270 0 : in107 = GF_MUL_VAR( in107, pi[ 107 ] );
271 0 : in108 = GF_MUL_VAR( in108, pi[ 108 ] );
272 0 : in109 = GF_MUL_VAR( in109, pi[ 109 ] );
273 0 : in110 = GF_MUL_VAR( in110, pi[ 110 ] );
274 0 : in111 = GF_MUL_VAR( in111, pi[ 111 ] );
275 0 : in112 = GF_MUL_VAR( in112, pi[ 112 ] );
276 0 : in113 = GF_MUL_VAR( in113, pi[ 113 ] );
277 0 : in114 = GF_MUL_VAR( in114, pi[ 114 ] );
278 0 : in115 = GF_MUL_VAR( in115, pi[ 115 ] );
279 0 : in116 = GF_MUL_VAR( in116, pi[ 116 ] );
280 0 : in117 = GF_MUL_VAR( in117, pi[ 117 ] );
281 0 : in118 = GF_MUL_VAR( in118, pi[ 118 ] );
282 0 : in119 = GF_MUL_VAR( in119, pi[ 119 ] );
283 0 : in120 = GF_MUL_VAR( in120, pi[ 120 ] );
284 0 : in121 = GF_MUL_VAR( in121, pi[ 121 ] );
285 0 : in122 = GF_MUL_VAR( in122, pi[ 122 ] );
286 0 : in123 = GF_MUL_VAR( in123, pi[ 123 ] );
287 0 : in124 = GF_MUL_VAR( in124, pi[ 124 ] );
288 0 : in125 = GF_MUL_VAR( in125, pi[ 125 ] );
289 0 : in126 = GF_MUL_VAR( in126, pi[ 126 ] );
290 0 : in127 = GF_MUL_VAR( in127, pi[ 127 ] );
291 0 : #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 0 : #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 0 : fd_reedsol_ifft_128_0( ALL_VARS_REF );
295 :
296 0 : FD_REEDSOL_GENERATE_FDERIV( 128, ALL_VARS );
297 :
298 0 : 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 0 : in00 = GF_MUL_VAR( in00, pi[ 0 ] );
304 0 : in01 = GF_MUL_VAR( in01, pi[ 1 ] );
305 0 : in02 = GF_MUL_VAR( in02, pi[ 2 ] );
306 0 : in03 = GF_MUL_VAR( in03, pi[ 3 ] );
307 0 : in04 = GF_MUL_VAR( in04, pi[ 4 ] );
308 0 : in05 = GF_MUL_VAR( in05, pi[ 5 ] );
309 0 : in06 = GF_MUL_VAR( in06, pi[ 6 ] );
310 0 : in07 = GF_MUL_VAR( in07, pi[ 7 ] );
311 0 : in08 = GF_MUL_VAR( in08, pi[ 8 ] );
312 0 : in09 = GF_MUL_VAR( in09, pi[ 9 ] );
313 0 : in10 = GF_MUL_VAR( in10, pi[ 10 ] );
314 0 : in11 = GF_MUL_VAR( in11, pi[ 11 ] );
315 0 : in12 = GF_MUL_VAR( in12, pi[ 12 ] );
316 0 : in13 = GF_MUL_VAR( in13, pi[ 13 ] );
317 0 : in14 = GF_MUL_VAR( in14, pi[ 14 ] );
318 0 : in15 = GF_MUL_VAR( in15, pi[ 15 ] );
319 0 : in16 = GF_MUL_VAR( in16, pi[ 16 ] );
320 0 : in17 = GF_MUL_VAR( in17, pi[ 17 ] );
321 0 : in18 = GF_MUL_VAR( in18, pi[ 18 ] );
322 0 : in19 = GF_MUL_VAR( in19, pi[ 19 ] );
323 0 : in20 = GF_MUL_VAR( in20, pi[ 20 ] );
324 0 : in21 = GF_MUL_VAR( in21, pi[ 21 ] );
325 0 : in22 = GF_MUL_VAR( in22, pi[ 22 ] );
326 0 : in23 = GF_MUL_VAR( in23, pi[ 23 ] );
327 0 : in24 = GF_MUL_VAR( in24, pi[ 24 ] );
328 0 : in25 = GF_MUL_VAR( in25, pi[ 25 ] );
329 0 : in26 = GF_MUL_VAR( in26, pi[ 26 ] );
330 0 : in27 = GF_MUL_VAR( in27, pi[ 27 ] );
331 0 : in28 = GF_MUL_VAR( in28, pi[ 28 ] );
332 0 : in29 = GF_MUL_VAR( in29, pi[ 29 ] );
333 0 : in30 = GF_MUL_VAR( in30, pi[ 30 ] );
334 0 : in31 = GF_MUL_VAR( in31, pi[ 31 ] );
335 0 : in32 = GF_MUL_VAR( in32, pi[ 32 ] );
336 0 : in33 = GF_MUL_VAR( in33, pi[ 33 ] );
337 0 : in34 = GF_MUL_VAR( in34, pi[ 34 ] );
338 0 : in35 = GF_MUL_VAR( in35, pi[ 35 ] );
339 0 : in36 = GF_MUL_VAR( in36, pi[ 36 ] );
340 0 : in37 = GF_MUL_VAR( in37, pi[ 37 ] );
341 0 : in38 = GF_MUL_VAR( in38, pi[ 38 ] );
342 0 : in39 = GF_MUL_VAR( in39, pi[ 39 ] );
343 0 : in40 = GF_MUL_VAR( in40, pi[ 40 ] );
344 0 : in41 = GF_MUL_VAR( in41, pi[ 41 ] );
345 0 : in42 = GF_MUL_VAR( in42, pi[ 42 ] );
346 0 : in43 = GF_MUL_VAR( in43, pi[ 43 ] );
347 0 : in44 = GF_MUL_VAR( in44, pi[ 44 ] );
348 0 : in45 = GF_MUL_VAR( in45, pi[ 45 ] );
349 0 : in46 = GF_MUL_VAR( in46, pi[ 46 ] );
350 0 : in47 = GF_MUL_VAR( in47, pi[ 47 ] );
351 0 : in48 = GF_MUL_VAR( in48, pi[ 48 ] );
352 0 : in49 = GF_MUL_VAR( in49, pi[ 49 ] );
353 0 : in50 = GF_MUL_VAR( in50, pi[ 50 ] );
354 0 : in51 = GF_MUL_VAR( in51, pi[ 51 ] );
355 0 : in52 = GF_MUL_VAR( in52, pi[ 52 ] );
356 0 : in53 = GF_MUL_VAR( in53, pi[ 53 ] );
357 0 : in54 = GF_MUL_VAR( in54, pi[ 54 ] );
358 0 : in55 = GF_MUL_VAR( in55, pi[ 55 ] );
359 0 : in56 = GF_MUL_VAR( in56, pi[ 56 ] );
360 0 : in57 = GF_MUL_VAR( in57, pi[ 57 ] );
361 0 : in58 = GF_MUL_VAR( in58, pi[ 58 ] );
362 0 : in59 = GF_MUL_VAR( in59, pi[ 59 ] );
363 0 : in60 = GF_MUL_VAR( in60, pi[ 60 ] );
364 0 : in61 = GF_MUL_VAR( in61, pi[ 61 ] );
365 0 : in62 = GF_MUL_VAR( in62, pi[ 62 ] );
366 0 : in63 = GF_MUL_VAR( in63, pi[ 63 ] );
367 0 : in64 = GF_MUL_VAR( in64, pi[ 64 ] );
368 0 : in65 = GF_MUL_VAR( in65, pi[ 65 ] );
369 0 : in66 = GF_MUL_VAR( in66, pi[ 66 ] );
370 0 : in67 = GF_MUL_VAR( in67, pi[ 67 ] );
371 0 : in68 = GF_MUL_VAR( in68, pi[ 68 ] );
372 0 : in69 = GF_MUL_VAR( in69, pi[ 69 ] );
373 0 : in70 = GF_MUL_VAR( in70, pi[ 70 ] );
374 0 : in71 = GF_MUL_VAR( in71, pi[ 71 ] );
375 0 : in72 = GF_MUL_VAR( in72, pi[ 72 ] );
376 0 : in73 = GF_MUL_VAR( in73, pi[ 73 ] );
377 0 : in74 = GF_MUL_VAR( in74, pi[ 74 ] );
378 0 : in75 = GF_MUL_VAR( in75, pi[ 75 ] );
379 0 : in76 = GF_MUL_VAR( in76, pi[ 76 ] );
380 0 : in77 = GF_MUL_VAR( in77, pi[ 77 ] );
381 0 : in78 = GF_MUL_VAR( in78, pi[ 78 ] );
382 0 : in79 = GF_MUL_VAR( in79, pi[ 79 ] );
383 0 : in80 = GF_MUL_VAR( in80, pi[ 80 ] );
384 0 : in81 = GF_MUL_VAR( in81, pi[ 81 ] );
385 0 : in82 = GF_MUL_VAR( in82, pi[ 82 ] );
386 0 : in83 = GF_MUL_VAR( in83, pi[ 83 ] );
387 0 : in84 = GF_MUL_VAR( in84, pi[ 84 ] );
388 0 : in85 = GF_MUL_VAR( in85, pi[ 85 ] );
389 0 : in86 = GF_MUL_VAR( in86, pi[ 86 ] );
390 0 : in87 = GF_MUL_VAR( in87, pi[ 87 ] );
391 0 : in88 = GF_MUL_VAR( in88, pi[ 88 ] );
392 0 : in89 = GF_MUL_VAR( in89, pi[ 89 ] );
393 0 : in90 = GF_MUL_VAR( in90, pi[ 90 ] );
394 0 : in91 = GF_MUL_VAR( in91, pi[ 91 ] );
395 0 : in92 = GF_MUL_VAR( in92, pi[ 92 ] );
396 0 : in93 = GF_MUL_VAR( in93, pi[ 93 ] );
397 0 : in94 = GF_MUL_VAR( in94, pi[ 94 ] );
398 0 : in95 = GF_MUL_VAR( in95, pi[ 95 ] );
399 0 : in96 = GF_MUL_VAR( in96, pi[ 96 ] );
400 0 : in97 = GF_MUL_VAR( in97, pi[ 97 ] );
401 0 : in98 = GF_MUL_VAR( in98, pi[ 98 ] );
402 0 : in99 = GF_MUL_VAR( in99, pi[ 99 ] );
403 0 : in100 = GF_MUL_VAR( in100, pi[ 100 ] );
404 0 : in101 = GF_MUL_VAR( in101, pi[ 101 ] );
405 0 : in102 = GF_MUL_VAR( in102, pi[ 102 ] );
406 0 : in103 = GF_MUL_VAR( in103, pi[ 103 ] );
407 0 : in104 = GF_MUL_VAR( in104, pi[ 104 ] );
408 0 : in105 = GF_MUL_VAR( in105, pi[ 105 ] );
409 0 : in106 = GF_MUL_VAR( in106, pi[ 106 ] );
410 0 : in107 = GF_MUL_VAR( in107, pi[ 107 ] );
411 0 : in108 = GF_MUL_VAR( in108, pi[ 108 ] );
412 0 : in109 = GF_MUL_VAR( in109, pi[ 109 ] );
413 0 : in110 = GF_MUL_VAR( in110, pi[ 110 ] );
414 0 : in111 = GF_MUL_VAR( in111, pi[ 111 ] );
415 0 : in112 = GF_MUL_VAR( in112, pi[ 112 ] );
416 0 : in113 = GF_MUL_VAR( in113, pi[ 113 ] );
417 0 : in114 = GF_MUL_VAR( in114, pi[ 114 ] );
418 0 : in115 = GF_MUL_VAR( in115, pi[ 115 ] );
419 0 : in116 = GF_MUL_VAR( in116, pi[ 116 ] );
420 0 : in117 = GF_MUL_VAR( in117, pi[ 117 ] );
421 0 : in118 = GF_MUL_VAR( in118, pi[ 118 ] );
422 0 : in119 = GF_MUL_VAR( in119, pi[ 119 ] );
423 0 : in120 = GF_MUL_VAR( in120, pi[ 120 ] );
424 0 : in121 = GF_MUL_VAR( in121, pi[ 121 ] );
425 0 : in122 = GF_MUL_VAR( in122, pi[ 122 ] );
426 0 : in123 = GF_MUL_VAR( in123, pi[ 123 ] );
427 0 : in124 = GF_MUL_VAR( in124, pi[ 124 ] );
428 0 : in125 = GF_MUL_VAR( in125, pi[ 125 ] );
429 0 : in126 = GF_MUL_VAR( in126, pi[ 126 ] );
430 0 : 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 0 : #define STORE_COMPARE_RELOAD( n, var ) do{ \
445 0 : if( erased[ n ] ) gf_stu( shred[ n ] + shred_pos, var ); \
446 0 : else if( _erased[ n ] ) diff = GF_OR( diff, GF_ADD( var, gf_ldu( shred[ n ] + shred_pos ) ) ); \
447 0 : else var = gf_ldu( shred[ n ] + shred_pos ); \
448 0 : } while( 0 )
449 0 : #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 0 : 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 0 : case 96UL: STORE_COMPARE_RELOAD( 95, in95 ); FALLTHRU
487 0 : case 95UL: STORE_COMPARE_RELOAD( 94, in94 ); FALLTHRU
488 0 : case 94UL: STORE_COMPARE_RELOAD( 93, in93 ); FALLTHRU
489 0 : case 93UL: STORE_COMPARE_RELOAD( 92, in92 ); FALLTHRU
490 0 : case 92UL: STORE_COMPARE_RELOAD( 91, in91 ); FALLTHRU
491 0 : case 91UL: STORE_COMPARE_RELOAD( 90, in90 ); FALLTHRU
492 0 : case 90UL: STORE_COMPARE_RELOAD( 89, in89 ); FALLTHRU
493 0 : case 89UL: STORE_COMPARE_RELOAD( 88, in88 ); FALLTHRU
494 0 : case 88UL: STORE_COMPARE_RELOAD( 87, in87 ); FALLTHRU
495 0 : case 87UL: STORE_COMPARE_RELOAD( 86, in86 ); FALLTHRU
496 0 : case 86UL: STORE_COMPARE_RELOAD( 85, in85 ); FALLTHRU
497 0 : case 85UL: STORE_COMPARE_RELOAD( 84, in84 ); FALLTHRU
498 0 : case 84UL: STORE_COMPARE_RELOAD( 83, in83 ); FALLTHRU
499 0 : case 83UL: STORE_COMPARE_RELOAD( 82, in82 ); FALLTHRU
500 0 : case 82UL: STORE_COMPARE_RELOAD( 81, in81 ); FALLTHRU
501 0 : case 81UL: STORE_COMPARE_RELOAD( 80, in80 ); FALLTHRU
502 0 : case 80UL: STORE_COMPARE_RELOAD( 79, in79 ); FALLTHRU
503 0 : case 79UL: STORE_COMPARE_RELOAD( 78, in78 ); FALLTHRU
504 0 : case 78UL: STORE_COMPARE_RELOAD( 77, in77 ); FALLTHRU
505 0 : case 77UL: STORE_COMPARE_RELOAD( 76, in76 ); FALLTHRU
506 0 : case 76UL: STORE_COMPARE_RELOAD( 75, in75 ); FALLTHRU
507 0 : case 75UL: STORE_COMPARE_RELOAD( 74, in74 ); FALLTHRU
508 0 : case 74UL: STORE_COMPARE_RELOAD( 73, in73 ); FALLTHRU
509 0 : case 73UL: STORE_COMPARE_RELOAD( 72, in72 ); FALLTHRU
510 0 : case 72UL: STORE_COMPARE_RELOAD( 71, in71 ); FALLTHRU
511 0 : case 71UL: STORE_COMPARE_RELOAD( 70, in70 ); FALLTHRU
512 0 : case 70UL: STORE_COMPARE_RELOAD( 69, in69 ); FALLTHRU
513 0 : case 69UL: STORE_COMPARE_RELOAD( 68, in68 ); FALLTHRU
514 0 : case 68UL: STORE_COMPARE_RELOAD( 67, in67 ); FALLTHRU
515 0 : case 67UL: STORE_COMPARE_RELOAD( 66, in66 ); FALLTHRU
516 0 : case 66UL: STORE_COMPARE_RELOAD( 65, in65 ); FALLTHRU
517 0 : case 65UL: STORE_COMPARE_RELOAD( 64, in64 ); FALLTHRU
518 0 : case 64UL: STORE_COMPARE_RELOAD( 63, in63 ); FALLTHRU
519 0 : case 63UL: STORE_COMPARE_RELOAD( 62, in62 ); FALLTHRU
520 0 : case 62UL: STORE_COMPARE_RELOAD( 61, in61 ); FALLTHRU
521 0 : case 61UL: STORE_COMPARE_RELOAD( 60, in60 ); FALLTHRU
522 0 : case 60UL: STORE_COMPARE_RELOAD( 59, in59 ); FALLTHRU
523 0 : case 59UL: STORE_COMPARE_RELOAD( 58, in58 ); FALLTHRU
524 0 : case 58UL: STORE_COMPARE_RELOAD( 57, in57 ); FALLTHRU
525 0 : case 57UL: STORE_COMPARE_RELOAD( 56, in56 ); FALLTHRU
526 0 : case 56UL: STORE_COMPARE_RELOAD( 55, in55 ); FALLTHRU
527 0 : case 55UL: STORE_COMPARE_RELOAD( 54, in54 ); FALLTHRU
528 0 : case 54UL: STORE_COMPARE_RELOAD( 53, in53 ); FALLTHRU
529 0 : case 53UL: STORE_COMPARE_RELOAD( 52, in52 ); FALLTHRU
530 0 : case 52UL: STORE_COMPARE_RELOAD( 51, in51 ); FALLTHRU
531 0 : case 51UL: STORE_COMPARE_RELOAD( 50, in50 ); FALLTHRU
532 0 : case 50UL: STORE_COMPARE_RELOAD( 49, in49 ); FALLTHRU
533 0 : case 49UL: STORE_COMPARE_RELOAD( 48, in48 ); FALLTHRU
534 0 : case 48UL: STORE_COMPARE_RELOAD( 47, in47 ); FALLTHRU
535 0 : case 47UL: STORE_COMPARE_RELOAD( 46, in46 ); FALLTHRU
536 0 : case 46UL: STORE_COMPARE_RELOAD( 45, in45 ); FALLTHRU
537 0 : case 45UL: STORE_COMPARE_RELOAD( 44, in44 ); FALLTHRU
538 0 : case 44UL: STORE_COMPARE_RELOAD( 43, in43 ); FALLTHRU
539 0 : case 43UL: STORE_COMPARE_RELOAD( 42, in42 ); FALLTHRU
540 0 : case 42UL: STORE_COMPARE_RELOAD( 41, in41 ); FALLTHRU
541 0 : case 41UL: STORE_COMPARE_RELOAD( 40, in40 ); FALLTHRU
542 0 : case 40UL: STORE_COMPARE_RELOAD( 39, in39 ); FALLTHRU
543 0 : case 39UL: STORE_COMPARE_RELOAD( 38, in38 ); FALLTHRU
544 0 : case 38UL: STORE_COMPARE_RELOAD( 37, in37 ); FALLTHRU
545 0 : case 37UL: STORE_COMPARE_RELOAD( 36, in36 ); FALLTHRU
546 0 : case 36UL: STORE_COMPARE_RELOAD( 35, in35 ); FALLTHRU
547 0 : case 35UL: STORE_COMPARE_RELOAD( 34, in34 ); FALLTHRU
548 0 : case 34UL: STORE_COMPARE_RELOAD( 33, in33 ); FALLTHRU
549 0 : case 33UL: STORE_COMPARE_RELOAD( 32, in32 ); FALLTHRU
550 0 : case 32UL: STORE_COMPARE_RELOAD( 31, in31 ); FALLTHRU
551 0 : case 31UL: STORE_COMPARE_RELOAD( 30, in30 ); FALLTHRU
552 0 : case 30UL: STORE_COMPARE_RELOAD( 29, in29 ); FALLTHRU
553 0 : case 29UL: STORE_COMPARE_RELOAD( 28, in28 ); FALLTHRU
554 0 : case 28UL: STORE_COMPARE_RELOAD( 27, in27 ); FALLTHRU
555 0 : case 27UL: STORE_COMPARE_RELOAD( 26, in26 ); FALLTHRU
556 0 : case 26UL: STORE_COMPARE_RELOAD( 25, in25 ); FALLTHRU
557 0 : case 25UL: STORE_COMPARE_RELOAD( 24, in24 ); FALLTHRU
558 0 : case 24UL: STORE_COMPARE_RELOAD( 23, in23 ); FALLTHRU
559 0 : case 23UL: STORE_COMPARE_RELOAD( 22, in22 ); FALLTHRU
560 0 : case 22UL: STORE_COMPARE_RELOAD( 21, in21 ); FALLTHRU
561 0 : case 21UL: STORE_COMPARE_RELOAD( 20, in20 ); FALLTHRU
562 0 : case 20UL: STORE_COMPARE_RELOAD( 19, in19 ); FALLTHRU
563 0 : case 19UL: STORE_COMPARE_RELOAD( 18, in18 ); FALLTHRU
564 0 : case 18UL: STORE_COMPARE_RELOAD( 17, in17 ); FALLTHRU
565 0 : case 17UL: STORE_COMPARE_RELOAD( 16, in16 ); FALLTHRU
566 0 : case 16UL: STORE_COMPARE_RELOAD( 15, in15 ); FALLTHRU
567 0 : case 15UL: STORE_COMPARE_RELOAD( 14, in14 ); FALLTHRU
568 0 : case 14UL: STORE_COMPARE_RELOAD( 13, in13 ); FALLTHRU
569 0 : case 13UL: STORE_COMPARE_RELOAD( 12, in12 ); FALLTHRU
570 0 : case 12UL: STORE_COMPARE_RELOAD( 11, in11 ); FALLTHRU
571 0 : case 11UL: STORE_COMPARE_RELOAD( 10, in10 ); FALLTHRU
572 0 : case 10UL: STORE_COMPARE_RELOAD( 9, in09 ); FALLTHRU
573 0 : case 9UL: STORE_COMPARE_RELOAD( 8, in08 ); FALLTHRU
574 0 : case 8UL: STORE_COMPARE_RELOAD( 7, in07 ); FALLTHRU
575 0 : case 7UL: STORE_COMPARE_RELOAD( 6, in06 ); FALLTHRU
576 0 : case 6UL: STORE_COMPARE_RELOAD( 5, in05 ); FALLTHRU
577 0 : case 5UL: STORE_COMPARE_RELOAD( 4, in04 ); FALLTHRU
578 0 : case 4UL: STORE_COMPARE_RELOAD( 3, in03 ); FALLTHRU
579 0 : case 3UL: STORE_COMPARE_RELOAD( 2, in02 ); FALLTHRU
580 0 : case 2UL: STORE_COMPARE_RELOAD( 1, in01 ); FALLTHRU
581 0 : case 1UL: STORE_COMPARE_RELOAD( 0, in00 );
582 0 : }
583 :
584 0 : ulong shreds_remaining = shred_cnt-fd_ulong_min( shred_cnt, 128UL );
585 0 : 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 6UL: STORE_COMPARE( 133, in05 ); FALLTHRU
591 0 : case 5UL: STORE_COMPARE( 132, in04 ); FALLTHRU
592 0 : case 4UL: STORE_COMPARE( 131, in03 ); FALLTHRU
593 0 : case 3UL: STORE_COMPARE( 130, in02 ); FALLTHRU
594 0 : case 2UL: STORE_COMPARE( 129, in01 ); FALLTHRU
595 0 : case 1UL: STORE_COMPARE( 128, in00 );
596 0 : }
597 0 : shreds_remaining -= fd_ulong_min( shreds_remaining, 128UL );
598 0 : }
599 0 : if( FD_UNLIKELY( GF_ANY( diff ) ) ) return FD_REEDSOL_ERR_CORRUPT;
600 0 : shred_pos += GF_WIDTH;
601 0 : shred_pos = fd_ulong_if( ((shred_sz-GF_WIDTH)<shred_pos) & (shred_pos<shred_sz), shred_sz-GF_WIDTH, shred_pos );
602 0 : #undef STORE_COMPARE_RELOAD
603 0 : #undef STORE_COMPARE
604 0 : #undef ALL_VARS
605 0 : #undef ALL_VARS_REF
606 0 : }
607 0 : return FD_REEDSOL_SUCCESS;
608 0 : }
|