Home | History | Annotate | Download | only in generic

Lines Matching refs:rn

79 mpn_matrix22_mul_itch (mp_size_t rn, mp_size_t mn)
81 if (BELOW_THRESHOLD (rn, MATRIX22_STRASSEN_THRESHOLD)
83 return 3*rn + 2*mn;
85 return 3*(rn + mn) + 5;
126 * Resulting elements are of size up to rn + mn + 1.
128 * Temporary storage: 3 rn + 3 mn + 5. */
130 mpn_matrix22_mul_strassen (mp_ptr r0, mp_ptr r1, mp_ptr r2, mp_ptr r3, mp_size_t rn,
136 s0 = tp; tp += rn + 1;
138 u0 = tp; tp += rn + mn + 1;
139 u1 = tp; /* rn + mn + 2 */
141 MUL (u0, r1, rn, m2, mn); /* u5 = s5 * t6 */
142 r3s = abs_sub_n (r3, r3, r2, rn); /* r3 - r2 */
145 r1s = abs_sub_n (r1, r1, r3, rn);
146 r1[rn] = 0;
150 r1[rn] = mpn_add_n (r1, r1, r3, rn);
155 s0[rn] = mpn_add_n (s0, r1, r0, rn);
158 else if (r1[rn] != 0)
160 s0[rn] = r1[rn] - mpn_sub_n (s0, r1, r0, rn);
166 s0s = abs_sub_n (s0, r0, r1, rn);
167 s0[rn] = 0;
169 MUL (u1, r0, rn, m0, mn); /* u0 = s0 * t0 */
170 r0[rn+mn] = mpn_add_n (r0, u0, u1, rn + mn);
171 ASSERT (r0[rn+mn] < 2); /* u0 + u5 */
175 MUL (u1, r3, rn, t0, mn); /* u2 = s2 * t2 */
176 u1[rn+mn] = 0;
187 /* FIXME: Could be simplified if we had space for rn + mn + 2 limbs
189 words t0[mn] and r1[rn] are non-zero with a pretty small
191 unconditional rn x (mn+1) followed by an if (UNLIKELY (r1[rn]))
195 MUL (r3, r1, rn, t0, mn + 1); /* u3 = s3 * t3 */
196 ASSERT (r1[rn] < 2);
197 if (r1[rn] != 0)
198 mpn_add_n (r3 + rn, r3 + rn, t0, mn + 1);
202 MUL (r3, r1, rn + 1, t0, mn);
205 ASSERT (r3[rn+mn] < 4);
207 u0[rn+mn] = 0;
210 r3s = abs_sub_n (r3, u0, r3, rn + mn + 1);
214 ASSERT_NOCARRY (mpn_add_n (r3, r3, u0, rn + mn + 1));
230 MUL (u0, r2, rn, t0, mn + 1); /* u6 = s6 * t4 */
231 ASSERT (u0[rn+mn] < 2);
234 ASSERT_NOCARRY (mpn_sub_n (r1, r2, r1, rn));
238 r1[rn] += mpn_add_n (r1, r1, r2, rn);
240 rn++;
241 t0s = add_signed_n (r2, r3, r3s, u0, t0s, rn + mn);
243 ASSERT (r2[rn+mn-1] < 4);
244 r3s = add_signed_n (r3, r3, r3s, u1, u1s, rn + mn);
246 ASSERT (r3[rn+mn-1] < 3);
247 MUL (u0, s0, rn, m1, mn); /* u4 = s4 * t5 */
248 ASSERT (u0[rn+mn-1] < 2);
250 MUL (u1, r1, rn, t0, mn + 1); /* u1 = s1 * t1 */
251 mn += rn;
280 mpn_matrix22_mul (mp_ptr r0, mp_ptr r1, mp_ptr r2, mp_ptr r3, mp_size_t rn,
284 if (BELOW_THRESHOLD (rn, MATRIX22_STRASSEN_THRESHOLD)
290 /* Temporary storage: 3 rn + 2 mn */
291 p0 = tp + rn;
292 p1 = p0 + rn + mn;
296 MPN_COPY (tp, r0, rn);
298 if (rn >= mn)
300 mpn_mul (p0, r0, rn, m0, mn);
301 mpn_mul (p1, r1, rn, m3, mn);
302 mpn_mul (r0, r1, rn, m2, mn);
303 mpn_mul (r1, tp, rn, m1, mn);
307 mpn_mul (p0, m0, mn, r0, rn);
308 mpn_mul (p1, m3, mn, r1, rn);
309 mpn_mul (r0, m2, mn, r1, rn);
310 mpn_mul (r1, m1, mn, tp, rn);
312 r0[rn+mn] = mpn_add_n (r0, r0, p0, rn + mn);
313 r1[rn+mn] = mpn_add_n (r1, r1, p1, rn + mn);
319 mpn_matrix22_mul_strassen (r0, r1, r2, r3, rn,