1 #include <blas_extended.h>
2 #include <blas_extended_private.h>
3 #include <blas_fpu.h>
BLAS_zhemv2_c_z_x(enum blas_order_type order,enum blas_uplo_type uplo,int n,const void * alpha,const void * a,int lda,const void * x_head,const void * x_tail,int incx,const void * beta,const void * y,int incy,enum blas_prec_type prec)4 void BLAS_zhemv2_c_z_x(enum blas_order_type order, enum blas_uplo_type uplo,
5 int n, const void *alpha, const void *a, int lda,
6 const void *x_head, const void *x_tail, int incx,
7 const void *beta, const void *y, int incy,
8 enum blas_prec_type prec)
9
10 /*
11 * Purpose
12 * =======
13 *
14 * This routines computes the matrix product:
15 *
16 * y <- alpha * A * (x_head + x_tail) + beta * y
17 *
18 * where A is a complex Hermitian matrix.
19 *
20 * Arguments
21 * =========
22 *
23 * order (input) enum blas_order_type
24 * Storage format of input symmetric matrix A.
25 *
26 * uplo (input) enum blas_uplo_type
27 * Determines which half of matrix A (upper or lower triangle)
28 * is accessed.
29 *
30 * n (input) int
31 * Dimension of A and size of vectors x, y.
32 *
33 * alpha (input) const void*
34 *
35 * a (input) void*
36 * Matrix A.
37 *
38 * lda (input) int
39 * Leading dimension of matrix A.
40 *
41 * x_head (input) void*
42 * Vector x_head
43 *
44 * x_tail (input) void*
45 * Vector x_tail
46 *
47 * incx (input) int
48 * Stride for vector x.
49 *
50 * beta (input) const void*
51 *
52 * y (input) void*
53 * Vector y.
54 *
55 * incy (input) int
56 * Stride for vector y.
57 *
58 * prec (input) enum blas_prec_type
59 * Specifies the internal precision to be used.
60 * = blas_prec_single: single precision.
61 * = blas_prec_double: double precision.
62 * = blas_prec_extra : anything at least 1.5 times as accurate
63 * than double, and wider than 80-bits.
64 * We use double-double in our implementation.
65 *
66 */
67 {
68 /* Routine name */
69 const char routine_name[] = "BLAS_zhemv2_c_z_x";
70 switch (prec) {
71
72 case blas_prec_single:{
73
74 int i, j;
75 int xi, yi, xi0, yi0;
76 int aij, ai;
77 int incai;
78 int incaij, incaij2;
79
80 const float *a_i = (float *) a;
81 const double *x_head_i = (double *) x_head;
82 const double *x_tail_i = (double *) x_tail;
83 double *y_i = (double *) y;
84 double *alpha_i = (double *) alpha;
85 double *beta_i = (double *) beta;
86 float a_elem[2];
87 double x_elem[2];
88 double y_elem[2];
89 float diag_elem;
90 double prod1[2];
91 double prod2[2];
92 double sum1[2];
93 double sum2[2];
94 double tmp1[2];
95 double tmp2[2];
96 double tmp3[2];
97
98
99
100 /* Test for no-op */
101 if (n <= 0) {
102 return;
103 }
104 if (alpha_i[0] == 0.0 && alpha_i[1] == 0.0
105 && (beta_i[0] == 1.0 && beta_i[1] == 0.0)) {
106 return;
107 }
108
109 /* Check for error conditions. */
110 if (n < 0) {
111 BLAS_error(routine_name, -3, n, NULL);
112 }
113 if (lda < n) {
114 BLAS_error(routine_name, -6, n, NULL);
115 }
116 if (incx == 0) {
117 BLAS_error(routine_name, -9, incx, NULL);
118 }
119 if (incy == 0) {
120 BLAS_error(routine_name, -12, incy, NULL);
121 }
122
123 if ((order == blas_colmajor && uplo == blas_upper) ||
124 (order == blas_rowmajor && uplo == blas_lower)) {
125 incai = lda;
126 incaij = 1;
127 incaij2 = lda;
128 } else {
129 incai = 1;
130 incaij = lda;
131 incaij2 = 1;
132 }
133
134 incx *= 2;
135 incy *= 2;
136 incai *= 2;
137 incaij *= 2;
138 incaij2 *= 2;
139 xi0 = (incx > 0) ? 0 : ((-n + 1) * incx);
140 yi0 = (incy > 0) ? 0 : ((-n + 1) * incy);
141
142
143
144 /* The most general form, y <--- alpha * A * (x_head + x_tail) + beta * y */
145 if (uplo == blas_lower) {
146 for (i = 0, yi = yi0, ai = 0; i < n; i++, yi += incy, ai += incai) {
147 sum1[0] = sum1[1] = 0.0;
148 sum2[0] = sum2[1] = 0.0;
149 for (j = 0, aij = ai, xi = xi0; j < i;
150 j++, aij += incaij, xi += incx) {
151 a_elem[0] = a_i[aij];
152 a_elem[1] = a_i[aij + 1];
153 x_elem[0] = x_head_i[xi];
154 x_elem[1] = x_head_i[xi + 1];
155 {
156 prod1[0] =
157 (double) a_elem[0] * x_elem[0] -
158 (double) a_elem[1] * x_elem[1];
159 prod1[1] =
160 (double) a_elem[0] * x_elem[1] +
161 (double) a_elem[1] * x_elem[0];
162 }
163 sum1[0] = sum1[0] + prod1[0];
164 sum1[1] = sum1[1] + prod1[1];
165 x_elem[0] = x_tail_i[xi];
166 x_elem[1] = x_tail_i[xi + 1];
167 {
168 prod2[0] =
169 (double) a_elem[0] * x_elem[0] -
170 (double) a_elem[1] * x_elem[1];
171 prod2[1] =
172 (double) a_elem[0] * x_elem[1] +
173 (double) a_elem[1] * x_elem[0];
174 }
175 sum2[0] = sum2[0] + prod2[0];
176 sum2[1] = sum2[1] + prod2[1];
177 }
178
179 diag_elem = a_i[aij];
180 x_elem[0] = x_head_i[xi];
181 x_elem[1] = x_head_i[xi + 1];
182 {
183 prod1[0] = x_elem[0] * diag_elem;
184 prod1[1] = x_elem[1] * diag_elem;
185 }
186 sum1[0] = sum1[0] + prod1[0];
187 sum1[1] = sum1[1] + prod1[1];
188 x_elem[0] = x_tail_i[xi];
189 x_elem[1] = x_tail_i[xi + 1];
190 {
191 prod2[0] = x_elem[0] * diag_elem;
192 prod2[1] = x_elem[1] * diag_elem;
193 }
194 sum2[0] = sum2[0] + prod2[0];
195 sum2[1] = sum2[1] + prod2[1];
196 j++;
197 aij += incaij2;
198 xi += incx;
199
200 for (; j < n; j++, aij += incaij2, xi += incx) {
201 a_elem[0] = a_i[aij];
202 a_elem[1] = a_i[aij + 1];
203 a_elem[1] = -a_elem[1];
204 x_elem[0] = x_head_i[xi];
205 x_elem[1] = x_head_i[xi + 1];
206 {
207 prod1[0] =
208 (double) a_elem[0] * x_elem[0] -
209 (double) a_elem[1] * x_elem[1];
210 prod1[1] =
211 (double) a_elem[0] * x_elem[1] +
212 (double) a_elem[1] * x_elem[0];
213 }
214 sum1[0] = sum1[0] + prod1[0];
215 sum1[1] = sum1[1] + prod1[1];
216 x_elem[0] = x_tail_i[xi];
217 x_elem[1] = x_tail_i[xi + 1];
218 {
219 prod2[0] =
220 (double) a_elem[0] * x_elem[0] -
221 (double) a_elem[1] * x_elem[1];
222 prod2[1] =
223 (double) a_elem[0] * x_elem[1] +
224 (double) a_elem[1] * x_elem[0];
225 }
226 sum2[0] = sum2[0] + prod2[0];
227 sum2[1] = sum2[1] + prod2[1];
228 }
229 sum1[0] = sum1[0] + sum2[0];
230 sum1[1] = sum1[1] + sum2[1];
231 {
232 tmp1[0] =
233 (double) sum1[0] * alpha_i[0] - (double) sum1[1] * alpha_i[1];
234 tmp1[1] =
235 (double) sum1[0] * alpha_i[1] + (double) sum1[1] * alpha_i[0];
236 }
237 y_elem[0] = y_i[yi];
238 y_elem[1] = y_i[yi + 1];
239 {
240 tmp2[0] =
241 (double) y_elem[0] * beta_i[0] - (double) y_elem[1] * beta_i[1];
242 tmp2[1] =
243 (double) y_elem[0] * beta_i[1] + (double) y_elem[1] * beta_i[0];
244 }
245 tmp3[0] = tmp1[0] + tmp2[0];
246 tmp3[1] = tmp1[1] + tmp2[1];
247 y_i[yi] = tmp3[0];
248 y_i[yi + 1] = tmp3[1];
249 }
250 } else {
251 /* uplo == blas_upper */
252 for (i = 0, yi = yi0, ai = 0; i < n; i++, yi += incy, ai += incai) {
253 sum1[0] = sum1[1] = 0.0;
254 sum2[0] = sum2[1] = 0.0;
255
256 for (j = 0, aij = ai, xi = xi0; j < i;
257 j++, aij += incaij, xi += incx) {
258 a_elem[0] = a_i[aij];
259 a_elem[1] = a_i[aij + 1];
260 a_elem[1] = -a_elem[1];
261 x_elem[0] = x_head_i[xi];
262 x_elem[1] = x_head_i[xi + 1];
263 {
264 prod1[0] =
265 (double) a_elem[0] * x_elem[0] -
266 (double) a_elem[1] * x_elem[1];
267 prod1[1] =
268 (double) a_elem[0] * x_elem[1] +
269 (double) a_elem[1] * x_elem[0];
270 }
271 sum1[0] = sum1[0] + prod1[0];
272 sum1[1] = sum1[1] + prod1[1];
273 x_elem[0] = x_tail_i[xi];
274 x_elem[1] = x_tail_i[xi + 1];
275 {
276 prod2[0] =
277 (double) a_elem[0] * x_elem[0] -
278 (double) a_elem[1] * x_elem[1];
279 prod2[1] =
280 (double) a_elem[0] * x_elem[1] +
281 (double) a_elem[1] * x_elem[0];
282 }
283 sum2[0] = sum2[0] + prod2[0];
284 sum2[1] = sum2[1] + prod2[1];
285 }
286
287 diag_elem = a_i[aij];
288 x_elem[0] = x_head_i[xi];
289 x_elem[1] = x_head_i[xi + 1];
290 {
291 prod1[0] = x_elem[0] * diag_elem;
292 prod1[1] = x_elem[1] * diag_elem;
293 }
294 sum1[0] = sum1[0] + prod1[0];
295 sum1[1] = sum1[1] + prod1[1];
296 x_elem[0] = x_tail_i[xi];
297 x_elem[1] = x_tail_i[xi + 1];
298 {
299 prod2[0] = x_elem[0] * diag_elem;
300 prod2[1] = x_elem[1] * diag_elem;
301 }
302 sum2[0] = sum2[0] + prod2[0];
303 sum2[1] = sum2[1] + prod2[1];
304 j++;
305 aij += incaij2;
306 xi += incx;
307
308 for (; j < n; j++, aij += incaij2, xi += incx) {
309 a_elem[0] = a_i[aij];
310 a_elem[1] = a_i[aij + 1];
311 x_elem[0] = x_head_i[xi];
312 x_elem[1] = x_head_i[xi + 1];
313 {
314 prod1[0] =
315 (double) a_elem[0] * x_elem[0] -
316 (double) a_elem[1] * x_elem[1];
317 prod1[1] =
318 (double) a_elem[0] * x_elem[1] +
319 (double) a_elem[1] * x_elem[0];
320 }
321 sum1[0] = sum1[0] + prod1[0];
322 sum1[1] = sum1[1] + prod1[1];
323 x_elem[0] = x_tail_i[xi];
324 x_elem[1] = x_tail_i[xi + 1];
325 {
326 prod2[0] =
327 (double) a_elem[0] * x_elem[0] -
328 (double) a_elem[1] * x_elem[1];
329 prod2[1] =
330 (double) a_elem[0] * x_elem[1] +
331 (double) a_elem[1] * x_elem[0];
332 }
333 sum2[0] = sum2[0] + prod2[0];
334 sum2[1] = sum2[1] + prod2[1];
335 }
336 sum1[0] = sum1[0] + sum2[0];
337 sum1[1] = sum1[1] + sum2[1];
338 {
339 tmp1[0] =
340 (double) sum1[0] * alpha_i[0] - (double) sum1[1] * alpha_i[1];
341 tmp1[1] =
342 (double) sum1[0] * alpha_i[1] + (double) sum1[1] * alpha_i[0];
343 }
344 y_elem[0] = y_i[yi];
345 y_elem[1] = y_i[yi + 1];
346 {
347 tmp2[0] =
348 (double) y_elem[0] * beta_i[0] - (double) y_elem[1] * beta_i[1];
349 tmp2[1] =
350 (double) y_elem[0] * beta_i[1] + (double) y_elem[1] * beta_i[0];
351 }
352 tmp3[0] = tmp1[0] + tmp2[0];
353 tmp3[1] = tmp1[1] + tmp2[1];
354 y_i[yi] = tmp3[0];
355 y_i[yi + 1] = tmp3[1];
356 }
357 }
358
359
360
361 break;
362 }
363
364 case blas_prec_double:
365 case blas_prec_indigenous:{
366
367 int i, j;
368 int xi, yi, xi0, yi0;
369 int aij, ai;
370 int incai;
371 int incaij, incaij2;
372
373 const float *a_i = (float *) a;
374 const double *x_head_i = (double *) x_head;
375 const double *x_tail_i = (double *) x_tail;
376 double *y_i = (double *) y;
377 double *alpha_i = (double *) alpha;
378 double *beta_i = (double *) beta;
379 float a_elem[2];
380 double x_elem[2];
381 double y_elem[2];
382 float diag_elem;
383 double prod1[2];
384 double prod2[2];
385 double sum1[2];
386 double sum2[2];
387 double tmp1[2];
388 double tmp2[2];
389 double tmp3[2];
390
391
392
393 /* Test for no-op */
394 if (n <= 0) {
395 return;
396 }
397 if (alpha_i[0] == 0.0 && alpha_i[1] == 0.0
398 && (beta_i[0] == 1.0 && beta_i[1] == 0.0)) {
399 return;
400 }
401
402 /* Check for error conditions. */
403 if (n < 0) {
404 BLAS_error(routine_name, -3, n, NULL);
405 }
406 if (lda < n) {
407 BLAS_error(routine_name, -6, n, NULL);
408 }
409 if (incx == 0) {
410 BLAS_error(routine_name, -9, incx, NULL);
411 }
412 if (incy == 0) {
413 BLAS_error(routine_name, -12, incy, NULL);
414 }
415
416 if ((order == blas_colmajor && uplo == blas_upper) ||
417 (order == blas_rowmajor && uplo == blas_lower)) {
418 incai = lda;
419 incaij = 1;
420 incaij2 = lda;
421 } else {
422 incai = 1;
423 incaij = lda;
424 incaij2 = 1;
425 }
426
427 incx *= 2;
428 incy *= 2;
429 incai *= 2;
430 incaij *= 2;
431 incaij2 *= 2;
432 xi0 = (incx > 0) ? 0 : ((-n + 1) * incx);
433 yi0 = (incy > 0) ? 0 : ((-n + 1) * incy);
434
435
436
437 /* The most general form, y <--- alpha * A * (x_head + x_tail) + beta * y */
438 if (uplo == blas_lower) {
439 for (i = 0, yi = yi0, ai = 0; i < n; i++, yi += incy, ai += incai) {
440 sum1[0] = sum1[1] = 0.0;
441 sum2[0] = sum2[1] = 0.0;
442 for (j = 0, aij = ai, xi = xi0; j < i;
443 j++, aij += incaij, xi += incx) {
444 a_elem[0] = a_i[aij];
445 a_elem[1] = a_i[aij + 1];
446 x_elem[0] = x_head_i[xi];
447 x_elem[1] = x_head_i[xi + 1];
448 {
449 prod1[0] =
450 (double) a_elem[0] * x_elem[0] -
451 (double) a_elem[1] * x_elem[1];
452 prod1[1] =
453 (double) a_elem[0] * x_elem[1] +
454 (double) a_elem[1] * x_elem[0];
455 }
456 sum1[0] = sum1[0] + prod1[0];
457 sum1[1] = sum1[1] + prod1[1];
458 x_elem[0] = x_tail_i[xi];
459 x_elem[1] = x_tail_i[xi + 1];
460 {
461 prod2[0] =
462 (double) a_elem[0] * x_elem[0] -
463 (double) a_elem[1] * x_elem[1];
464 prod2[1] =
465 (double) a_elem[0] * x_elem[1] +
466 (double) a_elem[1] * x_elem[0];
467 }
468 sum2[0] = sum2[0] + prod2[0];
469 sum2[1] = sum2[1] + prod2[1];
470 }
471
472 diag_elem = a_i[aij];
473 x_elem[0] = x_head_i[xi];
474 x_elem[1] = x_head_i[xi + 1];
475 {
476 prod1[0] = x_elem[0] * diag_elem;
477 prod1[1] = x_elem[1] * diag_elem;
478 }
479 sum1[0] = sum1[0] + prod1[0];
480 sum1[1] = sum1[1] + prod1[1];
481 x_elem[0] = x_tail_i[xi];
482 x_elem[1] = x_tail_i[xi + 1];
483 {
484 prod2[0] = x_elem[0] * diag_elem;
485 prod2[1] = x_elem[1] * diag_elem;
486 }
487 sum2[0] = sum2[0] + prod2[0];
488 sum2[1] = sum2[1] + prod2[1];
489 j++;
490 aij += incaij2;
491 xi += incx;
492
493 for (; j < n; j++, aij += incaij2, xi += incx) {
494 a_elem[0] = a_i[aij];
495 a_elem[1] = a_i[aij + 1];
496 a_elem[1] = -a_elem[1];
497 x_elem[0] = x_head_i[xi];
498 x_elem[1] = x_head_i[xi + 1];
499 {
500 prod1[0] =
501 (double) a_elem[0] * x_elem[0] -
502 (double) a_elem[1] * x_elem[1];
503 prod1[1] =
504 (double) a_elem[0] * x_elem[1] +
505 (double) a_elem[1] * x_elem[0];
506 }
507 sum1[0] = sum1[0] + prod1[0];
508 sum1[1] = sum1[1] + prod1[1];
509 x_elem[0] = x_tail_i[xi];
510 x_elem[1] = x_tail_i[xi + 1];
511 {
512 prod2[0] =
513 (double) a_elem[0] * x_elem[0] -
514 (double) a_elem[1] * x_elem[1];
515 prod2[1] =
516 (double) a_elem[0] * x_elem[1] +
517 (double) a_elem[1] * x_elem[0];
518 }
519 sum2[0] = sum2[0] + prod2[0];
520 sum2[1] = sum2[1] + prod2[1];
521 }
522 sum1[0] = sum1[0] + sum2[0];
523 sum1[1] = sum1[1] + sum2[1];
524 {
525 tmp1[0] =
526 (double) sum1[0] * alpha_i[0] - (double) sum1[1] * alpha_i[1];
527 tmp1[1] =
528 (double) sum1[0] * alpha_i[1] + (double) sum1[1] * alpha_i[0];
529 }
530 y_elem[0] = y_i[yi];
531 y_elem[1] = y_i[yi + 1];
532 {
533 tmp2[0] =
534 (double) y_elem[0] * beta_i[0] - (double) y_elem[1] * beta_i[1];
535 tmp2[1] =
536 (double) y_elem[0] * beta_i[1] + (double) y_elem[1] * beta_i[0];
537 }
538 tmp3[0] = tmp1[0] + tmp2[0];
539 tmp3[1] = tmp1[1] + tmp2[1];
540 y_i[yi] = tmp3[0];
541 y_i[yi + 1] = tmp3[1];
542 }
543 } else {
544 /* uplo == blas_upper */
545 for (i = 0, yi = yi0, ai = 0; i < n; i++, yi += incy, ai += incai) {
546 sum1[0] = sum1[1] = 0.0;
547 sum2[0] = sum2[1] = 0.0;
548
549 for (j = 0, aij = ai, xi = xi0; j < i;
550 j++, aij += incaij, xi += incx) {
551 a_elem[0] = a_i[aij];
552 a_elem[1] = a_i[aij + 1];
553 a_elem[1] = -a_elem[1];
554 x_elem[0] = x_head_i[xi];
555 x_elem[1] = x_head_i[xi + 1];
556 {
557 prod1[0] =
558 (double) a_elem[0] * x_elem[0] -
559 (double) a_elem[1] * x_elem[1];
560 prod1[1] =
561 (double) a_elem[0] * x_elem[1] +
562 (double) a_elem[1] * x_elem[0];
563 }
564 sum1[0] = sum1[0] + prod1[0];
565 sum1[1] = sum1[1] + prod1[1];
566 x_elem[0] = x_tail_i[xi];
567 x_elem[1] = x_tail_i[xi + 1];
568 {
569 prod2[0] =
570 (double) a_elem[0] * x_elem[0] -
571 (double) a_elem[1] * x_elem[1];
572 prod2[1] =
573 (double) a_elem[0] * x_elem[1] +
574 (double) a_elem[1] * x_elem[0];
575 }
576 sum2[0] = sum2[0] + prod2[0];
577 sum2[1] = sum2[1] + prod2[1];
578 }
579
580 diag_elem = a_i[aij];
581 x_elem[0] = x_head_i[xi];
582 x_elem[1] = x_head_i[xi + 1];
583 {
584 prod1[0] = x_elem[0] * diag_elem;
585 prod1[1] = x_elem[1] * diag_elem;
586 }
587 sum1[0] = sum1[0] + prod1[0];
588 sum1[1] = sum1[1] + prod1[1];
589 x_elem[0] = x_tail_i[xi];
590 x_elem[1] = x_tail_i[xi + 1];
591 {
592 prod2[0] = x_elem[0] * diag_elem;
593 prod2[1] = x_elem[1] * diag_elem;
594 }
595 sum2[0] = sum2[0] + prod2[0];
596 sum2[1] = sum2[1] + prod2[1];
597 j++;
598 aij += incaij2;
599 xi += incx;
600
601 for (; j < n; j++, aij += incaij2, xi += incx) {
602 a_elem[0] = a_i[aij];
603 a_elem[1] = a_i[aij + 1];
604 x_elem[0] = x_head_i[xi];
605 x_elem[1] = x_head_i[xi + 1];
606 {
607 prod1[0] =
608 (double) a_elem[0] * x_elem[0] -
609 (double) a_elem[1] * x_elem[1];
610 prod1[1] =
611 (double) a_elem[0] * x_elem[1] +
612 (double) a_elem[1] * x_elem[0];
613 }
614 sum1[0] = sum1[0] + prod1[0];
615 sum1[1] = sum1[1] + prod1[1];
616 x_elem[0] = x_tail_i[xi];
617 x_elem[1] = x_tail_i[xi + 1];
618 {
619 prod2[0] =
620 (double) a_elem[0] * x_elem[0] -
621 (double) a_elem[1] * x_elem[1];
622 prod2[1] =
623 (double) a_elem[0] * x_elem[1] +
624 (double) a_elem[1] * x_elem[0];
625 }
626 sum2[0] = sum2[0] + prod2[0];
627 sum2[1] = sum2[1] + prod2[1];
628 }
629 sum1[0] = sum1[0] + sum2[0];
630 sum1[1] = sum1[1] + sum2[1];
631 {
632 tmp1[0] =
633 (double) sum1[0] * alpha_i[0] - (double) sum1[1] * alpha_i[1];
634 tmp1[1] =
635 (double) sum1[0] * alpha_i[1] + (double) sum1[1] * alpha_i[0];
636 }
637 y_elem[0] = y_i[yi];
638 y_elem[1] = y_i[yi + 1];
639 {
640 tmp2[0] =
641 (double) y_elem[0] * beta_i[0] - (double) y_elem[1] * beta_i[1];
642 tmp2[1] =
643 (double) y_elem[0] * beta_i[1] + (double) y_elem[1] * beta_i[0];
644 }
645 tmp3[0] = tmp1[0] + tmp2[0];
646 tmp3[1] = tmp1[1] + tmp2[1];
647 y_i[yi] = tmp3[0];
648 y_i[yi + 1] = tmp3[1];
649 }
650 }
651
652
653
654 break;
655 }
656
657 case blas_prec_extra:{
658
659 int i, j;
660 int xi, yi, xi0, yi0;
661 int aij, ai;
662 int incai;
663 int incaij, incaij2;
664
665 const float *a_i = (float *) a;
666 const double *x_head_i = (double *) x_head;
667 const double *x_tail_i = (double *) x_tail;
668 double *y_i = (double *) y;
669 double *alpha_i = (double *) alpha;
670 double *beta_i = (double *) beta;
671 float a_elem[2];
672 double x_elem[2];
673 double y_elem[2];
674 float diag_elem;
675 double head_prod1[2], tail_prod1[2];
676 double head_prod2[2], tail_prod2[2];
677 double head_sum1[2], tail_sum1[2];
678 double head_sum2[2], tail_sum2[2];
679 double head_tmp1[2], tail_tmp1[2];
680 double head_tmp2[2], tail_tmp2[2];
681 double head_tmp3[2], tail_tmp3[2];
682
683 FPU_FIX_DECL;
684
685 /* Test for no-op */
686 if (n <= 0) {
687 return;
688 }
689 if (alpha_i[0] == 0.0 && alpha_i[1] == 0.0
690 && (beta_i[0] == 1.0 && beta_i[1] == 0.0)) {
691 return;
692 }
693
694 /* Check for error conditions. */
695 if (n < 0) {
696 BLAS_error(routine_name, -3, n, NULL);
697 }
698 if (lda < n) {
699 BLAS_error(routine_name, -6, n, NULL);
700 }
701 if (incx == 0) {
702 BLAS_error(routine_name, -9, incx, NULL);
703 }
704 if (incy == 0) {
705 BLAS_error(routine_name, -12, incy, NULL);
706 }
707
708 if ((order == blas_colmajor && uplo == blas_upper) ||
709 (order == blas_rowmajor && uplo == blas_lower)) {
710 incai = lda;
711 incaij = 1;
712 incaij2 = lda;
713 } else {
714 incai = 1;
715 incaij = lda;
716 incaij2 = 1;
717 }
718
719 incx *= 2;
720 incy *= 2;
721 incai *= 2;
722 incaij *= 2;
723 incaij2 *= 2;
724 xi0 = (incx > 0) ? 0 : ((-n + 1) * incx);
725 yi0 = (incy > 0) ? 0 : ((-n + 1) * incy);
726
727 FPU_FIX_START;
728
729 /* The most general form, y <--- alpha * A * (x_head + x_tail) + beta * y */
730 if (uplo == blas_lower) {
731 for (i = 0, yi = yi0, ai = 0; i < n; i++, yi += incy, ai += incai) {
732 head_sum1[0] = head_sum1[1] = tail_sum1[0] = tail_sum1[1] = 0.0;
733 head_sum2[0] = head_sum2[1] = tail_sum2[0] = tail_sum2[1] = 0.0;
734 for (j = 0, aij = ai, xi = xi0; j < i;
735 j++, aij += incaij, xi += incx) {
736 a_elem[0] = a_i[aij];
737 a_elem[1] = a_i[aij + 1];
738 x_elem[0] = x_head_i[xi];
739 x_elem[1] = x_head_i[xi + 1];
740 {
741 double cd[2];
742 cd[0] = (double) a_elem[0];
743 cd[1] = (double) a_elem[1];
744 {
745 /* Compute complex-extra = complex-double * complex-double. */
746 double head_t1, tail_t1;
747 double head_t2, tail_t2;
748 /* Real part */
749 {
750 /* Compute double_double = double * double. */
751 double a1, a2, b1, b2, con;
752
753 con = x_elem[0] * split;
754 a1 = con - x_elem[0];
755 a1 = con - a1;
756 a2 = x_elem[0] - a1;
757 con = cd[0] * split;
758 b1 = con - cd[0];
759 b1 = con - b1;
760 b2 = cd[0] - b1;
761
762 head_t1 = x_elem[0] * cd[0];
763 tail_t1 =
764 (((a1 * b1 - head_t1) + a1 * b2) + a2 * b1) + a2 * b2;
765 }
766 {
767 /* Compute double_double = double * double. */
768 double a1, a2, b1, b2, con;
769
770 con = x_elem[1] * split;
771 a1 = con - x_elem[1];
772 a1 = con - a1;
773 a2 = x_elem[1] - a1;
774 con = cd[1] * split;
775 b1 = con - cd[1];
776 b1 = con - b1;
777 b2 = cd[1] - b1;
778
779 head_t2 = x_elem[1] * cd[1];
780 tail_t2 =
781 (((a1 * b1 - head_t2) + a1 * b2) + a2 * b1) + a2 * b2;
782 }
783 head_t2 = -head_t2;
784 tail_t2 = -tail_t2;
785 {
786 /* Compute double-double = double-double + double-double. */
787 double bv;
788 double s1, s2, t1, t2;
789
790 /* Add two hi words. */
791 s1 = head_t1 + head_t2;
792 bv = s1 - head_t1;
793 s2 = ((head_t2 - bv) + (head_t1 - (s1 - bv)));
794
795 /* Add two lo words. */
796 t1 = tail_t1 + tail_t2;
797 bv = t1 - tail_t1;
798 t2 = ((tail_t2 - bv) + (tail_t1 - (t1 - bv)));
799
800 s2 += t1;
801
802 /* Renormalize (s1, s2) to (t1, s2) */
803 t1 = s1 + s2;
804 s2 = s2 - (t1 - s1);
805
806 t2 += s2;
807
808 /* Renormalize (t1, t2) */
809 head_t1 = t1 + t2;
810 tail_t1 = t2 - (head_t1 - t1);
811 }
812 head_prod1[0] = head_t1;
813 tail_prod1[0] = tail_t1;
814 /* Imaginary part */
815 {
816 /* Compute double_double = double * double. */
817 double a1, a2, b1, b2, con;
818
819 con = x_elem[1] * split;
820 a1 = con - x_elem[1];
821 a1 = con - a1;
822 a2 = x_elem[1] - a1;
823 con = cd[0] * split;
824 b1 = con - cd[0];
825 b1 = con - b1;
826 b2 = cd[0] - b1;
827
828 head_t1 = x_elem[1] * cd[0];
829 tail_t1 =
830 (((a1 * b1 - head_t1) + a1 * b2) + a2 * b1) + a2 * b2;
831 }
832 {
833 /* Compute double_double = double * double. */
834 double a1, a2, b1, b2, con;
835
836 con = x_elem[0] * split;
837 a1 = con - x_elem[0];
838 a1 = con - a1;
839 a2 = x_elem[0] - a1;
840 con = cd[1] * split;
841 b1 = con - cd[1];
842 b1 = con - b1;
843 b2 = cd[1] - b1;
844
845 head_t2 = x_elem[0] * cd[1];
846 tail_t2 =
847 (((a1 * b1 - head_t2) + a1 * b2) + a2 * b1) + a2 * b2;
848 }
849 {
850 /* Compute double-double = double-double + double-double. */
851 double bv;
852 double s1, s2, t1, t2;
853
854 /* Add two hi words. */
855 s1 = head_t1 + head_t2;
856 bv = s1 - head_t1;
857 s2 = ((head_t2 - bv) + (head_t1 - (s1 - bv)));
858
859 /* Add two lo words. */
860 t1 = tail_t1 + tail_t2;
861 bv = t1 - tail_t1;
862 t2 = ((tail_t2 - bv) + (tail_t1 - (t1 - bv)));
863
864 s2 += t1;
865
866 /* Renormalize (s1, s2) to (t1, s2) */
867 t1 = s1 + s2;
868 s2 = s2 - (t1 - s1);
869
870 t2 += s2;
871
872 /* Renormalize (t1, t2) */
873 head_t1 = t1 + t2;
874 tail_t1 = t2 - (head_t1 - t1);
875 }
876 head_prod1[1] = head_t1;
877 tail_prod1[1] = tail_t1;
878 }
879 }
880 {
881 double head_t, tail_t;
882 double head_a, tail_a;
883 double head_b, tail_b;
884 /* Real part */
885 head_a = head_sum1[0];
886 tail_a = tail_sum1[0];
887 head_b = head_prod1[0];
888 tail_b = tail_prod1[0];
889 {
890 /* Compute double-double = double-double + double-double. */
891 double bv;
892 double s1, s2, t1, t2;
893
894 /* Add two hi words. */
895 s1 = head_a + head_b;
896 bv = s1 - head_a;
897 s2 = ((head_b - bv) + (head_a - (s1 - bv)));
898
899 /* Add two lo words. */
900 t1 = tail_a + tail_b;
901 bv = t1 - tail_a;
902 t2 = ((tail_b - bv) + (tail_a - (t1 - bv)));
903
904 s2 += t1;
905
906 /* Renormalize (s1, s2) to (t1, s2) */
907 t1 = s1 + s2;
908 s2 = s2 - (t1 - s1);
909
910 t2 += s2;
911
912 /* Renormalize (t1, t2) */
913 head_t = t1 + t2;
914 tail_t = t2 - (head_t - t1);
915 }
916 head_sum1[0] = head_t;
917 tail_sum1[0] = tail_t;
918 /* Imaginary part */
919 head_a = head_sum1[1];
920 tail_a = tail_sum1[1];
921 head_b = head_prod1[1];
922 tail_b = tail_prod1[1];
923 {
924 /* Compute double-double = double-double + double-double. */
925 double bv;
926 double s1, s2, t1, t2;
927
928 /* Add two hi words. */
929 s1 = head_a + head_b;
930 bv = s1 - head_a;
931 s2 = ((head_b - bv) + (head_a - (s1 - bv)));
932
933 /* Add two lo words. */
934 t1 = tail_a + tail_b;
935 bv = t1 - tail_a;
936 t2 = ((tail_b - bv) + (tail_a - (t1 - bv)));
937
938 s2 += t1;
939
940 /* Renormalize (s1, s2) to (t1, s2) */
941 t1 = s1 + s2;
942 s2 = s2 - (t1 - s1);
943
944 t2 += s2;
945
946 /* Renormalize (t1, t2) */
947 head_t = t1 + t2;
948 tail_t = t2 - (head_t - t1);
949 }
950 head_sum1[1] = head_t;
951 tail_sum1[1] = tail_t;
952 }
953 x_elem[0] = x_tail_i[xi];
954 x_elem[1] = x_tail_i[xi + 1];
955 {
956 double cd[2];
957 cd[0] = (double) a_elem[0];
958 cd[1] = (double) a_elem[1];
959 {
960 /* Compute complex-extra = complex-double * complex-double. */
961 double head_t1, tail_t1;
962 double head_t2, tail_t2;
963 /* Real part */
964 {
965 /* Compute double_double = double * double. */
966 double a1, a2, b1, b2, con;
967
968 con = x_elem[0] * split;
969 a1 = con - x_elem[0];
970 a1 = con - a1;
971 a2 = x_elem[0] - a1;
972 con = cd[0] * split;
973 b1 = con - cd[0];
974 b1 = con - b1;
975 b2 = cd[0] - b1;
976
977 head_t1 = x_elem[0] * cd[0];
978 tail_t1 =
979 (((a1 * b1 - head_t1) + a1 * b2) + a2 * b1) + a2 * b2;
980 }
981 {
982 /* Compute double_double = double * double. */
983 double a1, a2, b1, b2, con;
984
985 con = x_elem[1] * split;
986 a1 = con - x_elem[1];
987 a1 = con - a1;
988 a2 = x_elem[1] - a1;
989 con = cd[1] * split;
990 b1 = con - cd[1];
991 b1 = con - b1;
992 b2 = cd[1] - b1;
993
994 head_t2 = x_elem[1] * cd[1];
995 tail_t2 =
996 (((a1 * b1 - head_t2) + a1 * b2) + a2 * b1) + a2 * b2;
997 }
998 head_t2 = -head_t2;
999 tail_t2 = -tail_t2;
1000 {
1001 /* Compute double-double = double-double + double-double. */
1002 double bv;
1003 double s1, s2, t1, t2;
1004
1005 /* Add two hi words. */
1006 s1 = head_t1 + head_t2;
1007 bv = s1 - head_t1;
1008 s2 = ((head_t2 - bv) + (head_t1 - (s1 - bv)));
1009
1010 /* Add two lo words. */
1011 t1 = tail_t1 + tail_t2;
1012 bv = t1 - tail_t1;
1013 t2 = ((tail_t2 - bv) + (tail_t1 - (t1 - bv)));
1014
1015 s2 += t1;
1016
1017 /* Renormalize (s1, s2) to (t1, s2) */
1018 t1 = s1 + s2;
1019 s2 = s2 - (t1 - s1);
1020
1021 t2 += s2;
1022
1023 /* Renormalize (t1, t2) */
1024 head_t1 = t1 + t2;
1025 tail_t1 = t2 - (head_t1 - t1);
1026 }
1027 head_prod2[0] = head_t1;
1028 tail_prod2[0] = tail_t1;
1029 /* Imaginary part */
1030 {
1031 /* Compute double_double = double * double. */
1032 double a1, a2, b1, b2, con;
1033
1034 con = x_elem[1] * split;
1035 a1 = con - x_elem[1];
1036 a1 = con - a1;
1037 a2 = x_elem[1] - a1;
1038 con = cd[0] * split;
1039 b1 = con - cd[0];
1040 b1 = con - b1;
1041 b2 = cd[0] - b1;
1042
1043 head_t1 = x_elem[1] * cd[0];
1044 tail_t1 =
1045 (((a1 * b1 - head_t1) + a1 * b2) + a2 * b1) + a2 * b2;
1046 }
1047 {
1048 /* Compute double_double = double * double. */
1049 double a1, a2, b1, b2, con;
1050
1051 con = x_elem[0] * split;
1052 a1 = con - x_elem[0];
1053 a1 = con - a1;
1054 a2 = x_elem[0] - a1;
1055 con = cd[1] * split;
1056 b1 = con - cd[1];
1057 b1 = con - b1;
1058 b2 = cd[1] - b1;
1059
1060 head_t2 = x_elem[0] * cd[1];
1061 tail_t2 =
1062 (((a1 * b1 - head_t2) + a1 * b2) + a2 * b1) + a2 * b2;
1063 }
1064 {
1065 /* Compute double-double = double-double + double-double. */
1066 double bv;
1067 double s1, s2, t1, t2;
1068
1069 /* Add two hi words. */
1070 s1 = head_t1 + head_t2;
1071 bv = s1 - head_t1;
1072 s2 = ((head_t2 - bv) + (head_t1 - (s1 - bv)));
1073
1074 /* Add two lo words. */
1075 t1 = tail_t1 + tail_t2;
1076 bv = t1 - tail_t1;
1077 t2 = ((tail_t2 - bv) + (tail_t1 - (t1 - bv)));
1078
1079 s2 += t1;
1080
1081 /* Renormalize (s1, s2) to (t1, s2) */
1082 t1 = s1 + s2;
1083 s2 = s2 - (t1 - s1);
1084
1085 t2 += s2;
1086
1087 /* Renormalize (t1, t2) */
1088 head_t1 = t1 + t2;
1089 tail_t1 = t2 - (head_t1 - t1);
1090 }
1091 head_prod2[1] = head_t1;
1092 tail_prod2[1] = tail_t1;
1093 }
1094 }
1095 {
1096 double head_t, tail_t;
1097 double head_a, tail_a;
1098 double head_b, tail_b;
1099 /* Real part */
1100 head_a = head_sum2[0];
1101 tail_a = tail_sum2[0];
1102 head_b = head_prod2[0];
1103 tail_b = tail_prod2[0];
1104 {
1105 /* Compute double-double = double-double + double-double. */
1106 double bv;
1107 double s1, s2, t1, t2;
1108
1109 /* Add two hi words. */
1110 s1 = head_a + head_b;
1111 bv = s1 - head_a;
1112 s2 = ((head_b - bv) + (head_a - (s1 - bv)));
1113
1114 /* Add two lo words. */
1115 t1 = tail_a + tail_b;
1116 bv = t1 - tail_a;
1117 t2 = ((tail_b - bv) + (tail_a - (t1 - bv)));
1118
1119 s2 += t1;
1120
1121 /* Renormalize (s1, s2) to (t1, s2) */
1122 t1 = s1 + s2;
1123 s2 = s2 - (t1 - s1);
1124
1125 t2 += s2;
1126
1127 /* Renormalize (t1, t2) */
1128 head_t = t1 + t2;
1129 tail_t = t2 - (head_t - t1);
1130 }
1131 head_sum2[0] = head_t;
1132 tail_sum2[0] = tail_t;
1133 /* Imaginary part */
1134 head_a = head_sum2[1];
1135 tail_a = tail_sum2[1];
1136 head_b = head_prod2[1];
1137 tail_b = tail_prod2[1];
1138 {
1139 /* Compute double-double = double-double + double-double. */
1140 double bv;
1141 double s1, s2, t1, t2;
1142
1143 /* Add two hi words. */
1144 s1 = head_a + head_b;
1145 bv = s1 - head_a;
1146 s2 = ((head_b - bv) + (head_a - (s1 - bv)));
1147
1148 /* Add two lo words. */
1149 t1 = tail_a + tail_b;
1150 bv = t1 - tail_a;
1151 t2 = ((tail_b - bv) + (tail_a - (t1 - bv)));
1152
1153 s2 += t1;
1154
1155 /* Renormalize (s1, s2) to (t1, s2) */
1156 t1 = s1 + s2;
1157 s2 = s2 - (t1 - s1);
1158
1159 t2 += s2;
1160
1161 /* Renormalize (t1, t2) */
1162 head_t = t1 + t2;
1163 tail_t = t2 - (head_t - t1);
1164 }
1165 head_sum2[1] = head_t;
1166 tail_sum2[1] = tail_t;
1167 }
1168 }
1169
1170 diag_elem = a_i[aij];
1171 x_elem[0] = x_head_i[xi];
1172 x_elem[1] = x_head_i[xi + 1];
1173 {
1174 double dt = (double) diag_elem;
1175 {
1176 /* Compute complex-extra = complex-double * real. */
1177 double head_t, tail_t;
1178 {
1179 /* Compute double_double = double * double. */
1180 double a1, a2, b1, b2, con;
1181
1182 con = dt * split;
1183 a1 = con - dt;
1184 a1 = con - a1;
1185 a2 = dt - a1;
1186 con = x_elem[0] * split;
1187 b1 = con - x_elem[0];
1188 b1 = con - b1;
1189 b2 = x_elem[0] - b1;
1190
1191 head_t = dt * x_elem[0];
1192 tail_t = (((a1 * b1 - head_t) + a1 * b2) + a2 * b1) + a2 * b2;
1193 }
1194 head_prod1[0] = head_t;
1195 tail_prod1[0] = tail_t;
1196 {
1197 /* Compute double_double = double * double. */
1198 double a1, a2, b1, b2, con;
1199
1200 con = dt * split;
1201 a1 = con - dt;
1202 a1 = con - a1;
1203 a2 = dt - a1;
1204 con = x_elem[1] * split;
1205 b1 = con - x_elem[1];
1206 b1 = con - b1;
1207 b2 = x_elem[1] - b1;
1208
1209 head_t = dt * x_elem[1];
1210 tail_t = (((a1 * b1 - head_t) + a1 * b2) + a2 * b1) + a2 * b2;
1211 }
1212 head_prod1[1] = head_t;
1213 tail_prod1[1] = tail_t;
1214 }
1215 }
1216 {
1217 double head_t, tail_t;
1218 double head_a, tail_a;
1219 double head_b, tail_b;
1220 /* Real part */
1221 head_a = head_sum1[0];
1222 tail_a = tail_sum1[0];
1223 head_b = head_prod1[0];
1224 tail_b = tail_prod1[0];
1225 {
1226 /* Compute double-double = double-double + double-double. */
1227 double bv;
1228 double s1, s2, t1, t2;
1229
1230 /* Add two hi words. */
1231 s1 = head_a + head_b;
1232 bv = s1 - head_a;
1233 s2 = ((head_b - bv) + (head_a - (s1 - bv)));
1234
1235 /* Add two lo words. */
1236 t1 = tail_a + tail_b;
1237 bv = t1 - tail_a;
1238 t2 = ((tail_b - bv) + (tail_a - (t1 - bv)));
1239
1240 s2 += t1;
1241
1242 /* Renormalize (s1, s2) to (t1, s2) */
1243 t1 = s1 + s2;
1244 s2 = s2 - (t1 - s1);
1245
1246 t2 += s2;
1247
1248 /* Renormalize (t1, t2) */
1249 head_t = t1 + t2;
1250 tail_t = t2 - (head_t - t1);
1251 }
1252 head_sum1[0] = head_t;
1253 tail_sum1[0] = tail_t;
1254 /* Imaginary part */
1255 head_a = head_sum1[1];
1256 tail_a = tail_sum1[1];
1257 head_b = head_prod1[1];
1258 tail_b = tail_prod1[1];
1259 {
1260 /* Compute double-double = double-double + double-double. */
1261 double bv;
1262 double s1, s2, t1, t2;
1263
1264 /* Add two hi words. */
1265 s1 = head_a + head_b;
1266 bv = s1 - head_a;
1267 s2 = ((head_b - bv) + (head_a - (s1 - bv)));
1268
1269 /* Add two lo words. */
1270 t1 = tail_a + tail_b;
1271 bv = t1 - tail_a;
1272 t2 = ((tail_b - bv) + (tail_a - (t1 - bv)));
1273
1274 s2 += t1;
1275
1276 /* Renormalize (s1, s2) to (t1, s2) */
1277 t1 = s1 + s2;
1278 s2 = s2 - (t1 - s1);
1279
1280 t2 += s2;
1281
1282 /* Renormalize (t1, t2) */
1283 head_t = t1 + t2;
1284 tail_t = t2 - (head_t - t1);
1285 }
1286 head_sum1[1] = head_t;
1287 tail_sum1[1] = tail_t;
1288 }
1289 x_elem[0] = x_tail_i[xi];
1290 x_elem[1] = x_tail_i[xi + 1];
1291 {
1292 double dt = (double) diag_elem;
1293 {
1294 /* Compute complex-extra = complex-double * real. */
1295 double head_t, tail_t;
1296 {
1297 /* Compute double_double = double * double. */
1298 double a1, a2, b1, b2, con;
1299
1300 con = dt * split;
1301 a1 = con - dt;
1302 a1 = con - a1;
1303 a2 = dt - a1;
1304 con = x_elem[0] * split;
1305 b1 = con - x_elem[0];
1306 b1 = con - b1;
1307 b2 = x_elem[0] - b1;
1308
1309 head_t = dt * x_elem[0];
1310 tail_t = (((a1 * b1 - head_t) + a1 * b2) + a2 * b1) + a2 * b2;
1311 }
1312 head_prod2[0] = head_t;
1313 tail_prod2[0] = tail_t;
1314 {
1315 /* Compute double_double = double * double. */
1316 double a1, a2, b1, b2, con;
1317
1318 con = dt * split;
1319 a1 = con - dt;
1320 a1 = con - a1;
1321 a2 = dt - a1;
1322 con = x_elem[1] * split;
1323 b1 = con - x_elem[1];
1324 b1 = con - b1;
1325 b2 = x_elem[1] - b1;
1326
1327 head_t = dt * x_elem[1];
1328 tail_t = (((a1 * b1 - head_t) + a1 * b2) + a2 * b1) + a2 * b2;
1329 }
1330 head_prod2[1] = head_t;
1331 tail_prod2[1] = tail_t;
1332 }
1333 }
1334 {
1335 double head_t, tail_t;
1336 double head_a, tail_a;
1337 double head_b, tail_b;
1338 /* Real part */
1339 head_a = head_sum2[0];
1340 tail_a = tail_sum2[0];
1341 head_b = head_prod2[0];
1342 tail_b = tail_prod2[0];
1343 {
1344 /* Compute double-double = double-double + double-double. */
1345 double bv;
1346 double s1, s2, t1, t2;
1347
1348 /* Add two hi words. */
1349 s1 = head_a + head_b;
1350 bv = s1 - head_a;
1351 s2 = ((head_b - bv) + (head_a - (s1 - bv)));
1352
1353 /* Add two lo words. */
1354 t1 = tail_a + tail_b;
1355 bv = t1 - tail_a;
1356 t2 = ((tail_b - bv) + (tail_a - (t1 - bv)));
1357
1358 s2 += t1;
1359
1360 /* Renormalize (s1, s2) to (t1, s2) */
1361 t1 = s1 + s2;
1362 s2 = s2 - (t1 - s1);
1363
1364 t2 += s2;
1365
1366 /* Renormalize (t1, t2) */
1367 head_t = t1 + t2;
1368 tail_t = t2 - (head_t - t1);
1369 }
1370 head_sum2[0] = head_t;
1371 tail_sum2[0] = tail_t;
1372 /* Imaginary part */
1373 head_a = head_sum2[1];
1374 tail_a = tail_sum2[1];
1375 head_b = head_prod2[1];
1376 tail_b = tail_prod2[1];
1377 {
1378 /* Compute double-double = double-double + double-double. */
1379 double bv;
1380 double s1, s2, t1, t2;
1381
1382 /* Add two hi words. */
1383 s1 = head_a + head_b;
1384 bv = s1 - head_a;
1385 s2 = ((head_b - bv) + (head_a - (s1 - bv)));
1386
1387 /* Add two lo words. */
1388 t1 = tail_a + tail_b;
1389 bv = t1 - tail_a;
1390 t2 = ((tail_b - bv) + (tail_a - (t1 - bv)));
1391
1392 s2 += t1;
1393
1394 /* Renormalize (s1, s2) to (t1, s2) */
1395 t1 = s1 + s2;
1396 s2 = s2 - (t1 - s1);
1397
1398 t2 += s2;
1399
1400 /* Renormalize (t1, t2) */
1401 head_t = t1 + t2;
1402 tail_t = t2 - (head_t - t1);
1403 }
1404 head_sum2[1] = head_t;
1405 tail_sum2[1] = tail_t;
1406 }
1407 j++;
1408 aij += incaij2;
1409 xi += incx;
1410
1411 for (; j < n; j++, aij += incaij2, xi += incx) {
1412 a_elem[0] = a_i[aij];
1413 a_elem[1] = a_i[aij + 1];
1414 a_elem[1] = -a_elem[1];
1415 x_elem[0] = x_head_i[xi];
1416 x_elem[1] = x_head_i[xi + 1];
1417 {
1418 double cd[2];
1419 cd[0] = (double) a_elem[0];
1420 cd[1] = (double) a_elem[1];
1421 {
1422 /* Compute complex-extra = complex-double * complex-double. */
1423 double head_t1, tail_t1;
1424 double head_t2, tail_t2;
1425 /* Real part */
1426 {
1427 /* Compute double_double = double * double. */
1428 double a1, a2, b1, b2, con;
1429
1430 con = x_elem[0] * split;
1431 a1 = con - x_elem[0];
1432 a1 = con - a1;
1433 a2 = x_elem[0] - a1;
1434 con = cd[0] * split;
1435 b1 = con - cd[0];
1436 b1 = con - b1;
1437 b2 = cd[0] - b1;
1438
1439 head_t1 = x_elem[0] * cd[0];
1440 tail_t1 =
1441 (((a1 * b1 - head_t1) + a1 * b2) + a2 * b1) + a2 * b2;
1442 }
1443 {
1444 /* Compute double_double = double * double. */
1445 double a1, a2, b1, b2, con;
1446
1447 con = x_elem[1] * split;
1448 a1 = con - x_elem[1];
1449 a1 = con - a1;
1450 a2 = x_elem[1] - a1;
1451 con = cd[1] * split;
1452 b1 = con - cd[1];
1453 b1 = con - b1;
1454 b2 = cd[1] - b1;
1455
1456 head_t2 = x_elem[1] * cd[1];
1457 tail_t2 =
1458 (((a1 * b1 - head_t2) + a1 * b2) + a2 * b1) + a2 * b2;
1459 }
1460 head_t2 = -head_t2;
1461 tail_t2 = -tail_t2;
1462 {
1463 /* Compute double-double = double-double + double-double. */
1464 double bv;
1465 double s1, s2, t1, t2;
1466
1467 /* Add two hi words. */
1468 s1 = head_t1 + head_t2;
1469 bv = s1 - head_t1;
1470 s2 = ((head_t2 - bv) + (head_t1 - (s1 - bv)));
1471
1472 /* Add two lo words. */
1473 t1 = tail_t1 + tail_t2;
1474 bv = t1 - tail_t1;
1475 t2 = ((tail_t2 - bv) + (tail_t1 - (t1 - bv)));
1476
1477 s2 += t1;
1478
1479 /* Renormalize (s1, s2) to (t1, s2) */
1480 t1 = s1 + s2;
1481 s2 = s2 - (t1 - s1);
1482
1483 t2 += s2;
1484
1485 /* Renormalize (t1, t2) */
1486 head_t1 = t1 + t2;
1487 tail_t1 = t2 - (head_t1 - t1);
1488 }
1489 head_prod1[0] = head_t1;
1490 tail_prod1[0] = tail_t1;
1491 /* Imaginary part */
1492 {
1493 /* Compute double_double = double * double. */
1494 double a1, a2, b1, b2, con;
1495
1496 con = x_elem[1] * split;
1497 a1 = con - x_elem[1];
1498 a1 = con - a1;
1499 a2 = x_elem[1] - a1;
1500 con = cd[0] * split;
1501 b1 = con - cd[0];
1502 b1 = con - b1;
1503 b2 = cd[0] - b1;
1504
1505 head_t1 = x_elem[1] * cd[0];
1506 tail_t1 =
1507 (((a1 * b1 - head_t1) + a1 * b2) + a2 * b1) + a2 * b2;
1508 }
1509 {
1510 /* Compute double_double = double * double. */
1511 double a1, a2, b1, b2, con;
1512
1513 con = x_elem[0] * split;
1514 a1 = con - x_elem[0];
1515 a1 = con - a1;
1516 a2 = x_elem[0] - a1;
1517 con = cd[1] * split;
1518 b1 = con - cd[1];
1519 b1 = con - b1;
1520 b2 = cd[1] - b1;
1521
1522 head_t2 = x_elem[0] * cd[1];
1523 tail_t2 =
1524 (((a1 * b1 - head_t2) + a1 * b2) + a2 * b1) + a2 * b2;
1525 }
1526 {
1527 /* Compute double-double = double-double + double-double. */
1528 double bv;
1529 double s1, s2, t1, t2;
1530
1531 /* Add two hi words. */
1532 s1 = head_t1 + head_t2;
1533 bv = s1 - head_t1;
1534 s2 = ((head_t2 - bv) + (head_t1 - (s1 - bv)));
1535
1536 /* Add two lo words. */
1537 t1 = tail_t1 + tail_t2;
1538 bv = t1 - tail_t1;
1539 t2 = ((tail_t2 - bv) + (tail_t1 - (t1 - bv)));
1540
1541 s2 += t1;
1542
1543 /* Renormalize (s1, s2) to (t1, s2) */
1544 t1 = s1 + s2;
1545 s2 = s2 - (t1 - s1);
1546
1547 t2 += s2;
1548
1549 /* Renormalize (t1, t2) */
1550 head_t1 = t1 + t2;
1551 tail_t1 = t2 - (head_t1 - t1);
1552 }
1553 head_prod1[1] = head_t1;
1554 tail_prod1[1] = tail_t1;
1555 }
1556 }
1557 {
1558 double head_t, tail_t;
1559 double head_a, tail_a;
1560 double head_b, tail_b;
1561 /* Real part */
1562 head_a = head_sum1[0];
1563 tail_a = tail_sum1[0];
1564 head_b = head_prod1[0];
1565 tail_b = tail_prod1[0];
1566 {
1567 /* Compute double-double = double-double + double-double. */
1568 double bv;
1569 double s1, s2, t1, t2;
1570
1571 /* Add two hi words. */
1572 s1 = head_a + head_b;
1573 bv = s1 - head_a;
1574 s2 = ((head_b - bv) + (head_a - (s1 - bv)));
1575
1576 /* Add two lo words. */
1577 t1 = tail_a + tail_b;
1578 bv = t1 - tail_a;
1579 t2 = ((tail_b - bv) + (tail_a - (t1 - bv)));
1580
1581 s2 += t1;
1582
1583 /* Renormalize (s1, s2) to (t1, s2) */
1584 t1 = s1 + s2;
1585 s2 = s2 - (t1 - s1);
1586
1587 t2 += s2;
1588
1589 /* Renormalize (t1, t2) */
1590 head_t = t1 + t2;
1591 tail_t = t2 - (head_t - t1);
1592 }
1593 head_sum1[0] = head_t;
1594 tail_sum1[0] = tail_t;
1595 /* Imaginary part */
1596 head_a = head_sum1[1];
1597 tail_a = tail_sum1[1];
1598 head_b = head_prod1[1];
1599 tail_b = tail_prod1[1];
1600 {
1601 /* Compute double-double = double-double + double-double. */
1602 double bv;
1603 double s1, s2, t1, t2;
1604
1605 /* Add two hi words. */
1606 s1 = head_a + head_b;
1607 bv = s1 - head_a;
1608 s2 = ((head_b - bv) + (head_a - (s1 - bv)));
1609
1610 /* Add two lo words. */
1611 t1 = tail_a + tail_b;
1612 bv = t1 - tail_a;
1613 t2 = ((tail_b - bv) + (tail_a - (t1 - bv)));
1614
1615 s2 += t1;
1616
1617 /* Renormalize (s1, s2) to (t1, s2) */
1618 t1 = s1 + s2;
1619 s2 = s2 - (t1 - s1);
1620
1621 t2 += s2;
1622
1623 /* Renormalize (t1, t2) */
1624 head_t = t1 + t2;
1625 tail_t = t2 - (head_t - t1);
1626 }
1627 head_sum1[1] = head_t;
1628 tail_sum1[1] = tail_t;
1629 }
1630 x_elem[0] = x_tail_i[xi];
1631 x_elem[1] = x_tail_i[xi + 1];
1632 {
1633 double cd[2];
1634 cd[0] = (double) a_elem[0];
1635 cd[1] = (double) a_elem[1];
1636 {
1637 /* Compute complex-extra = complex-double * complex-double. */
1638 double head_t1, tail_t1;
1639 double head_t2, tail_t2;
1640 /* Real part */
1641 {
1642 /* Compute double_double = double * double. */
1643 double a1, a2, b1, b2, con;
1644
1645 con = x_elem[0] * split;
1646 a1 = con - x_elem[0];
1647 a1 = con - a1;
1648 a2 = x_elem[0] - a1;
1649 con = cd[0] * split;
1650 b1 = con - cd[0];
1651 b1 = con - b1;
1652 b2 = cd[0] - b1;
1653
1654 head_t1 = x_elem[0] * cd[0];
1655 tail_t1 =
1656 (((a1 * b1 - head_t1) + a1 * b2) + a2 * b1) + a2 * b2;
1657 }
1658 {
1659 /* Compute double_double = double * double. */
1660 double a1, a2, b1, b2, con;
1661
1662 con = x_elem[1] * split;
1663 a1 = con - x_elem[1];
1664 a1 = con - a1;
1665 a2 = x_elem[1] - a1;
1666 con = cd[1] * split;
1667 b1 = con - cd[1];
1668 b1 = con - b1;
1669 b2 = cd[1] - b1;
1670
1671 head_t2 = x_elem[1] * cd[1];
1672 tail_t2 =
1673 (((a1 * b1 - head_t2) + a1 * b2) + a2 * b1) + a2 * b2;
1674 }
1675 head_t2 = -head_t2;
1676 tail_t2 = -tail_t2;
1677 {
1678 /* Compute double-double = double-double + double-double. */
1679 double bv;
1680 double s1, s2, t1, t2;
1681
1682 /* Add two hi words. */
1683 s1 = head_t1 + head_t2;
1684 bv = s1 - head_t1;
1685 s2 = ((head_t2 - bv) + (head_t1 - (s1 - bv)));
1686
1687 /* Add two lo words. */
1688 t1 = tail_t1 + tail_t2;
1689 bv = t1 - tail_t1;
1690 t2 = ((tail_t2 - bv) + (tail_t1 - (t1 - bv)));
1691
1692 s2 += t1;
1693
1694 /* Renormalize (s1, s2) to (t1, s2) */
1695 t1 = s1 + s2;
1696 s2 = s2 - (t1 - s1);
1697
1698 t2 += s2;
1699
1700 /* Renormalize (t1, t2) */
1701 head_t1 = t1 + t2;
1702 tail_t1 = t2 - (head_t1 - t1);
1703 }
1704 head_prod2[0] = head_t1;
1705 tail_prod2[0] = tail_t1;
1706 /* Imaginary part */
1707 {
1708 /* Compute double_double = double * double. */
1709 double a1, a2, b1, b2, con;
1710
1711 con = x_elem[1] * split;
1712 a1 = con - x_elem[1];
1713 a1 = con - a1;
1714 a2 = x_elem[1] - a1;
1715 con = cd[0] * split;
1716 b1 = con - cd[0];
1717 b1 = con - b1;
1718 b2 = cd[0] - b1;
1719
1720 head_t1 = x_elem[1] * cd[0];
1721 tail_t1 =
1722 (((a1 * b1 - head_t1) + a1 * b2) + a2 * b1) + a2 * b2;
1723 }
1724 {
1725 /* Compute double_double = double * double. */
1726 double a1, a2, b1, b2, con;
1727
1728 con = x_elem[0] * split;
1729 a1 = con - x_elem[0];
1730 a1 = con - a1;
1731 a2 = x_elem[0] - a1;
1732 con = cd[1] * split;
1733 b1 = con - cd[1];
1734 b1 = con - b1;
1735 b2 = cd[1] - b1;
1736
1737 head_t2 = x_elem[0] * cd[1];
1738 tail_t2 =
1739 (((a1 * b1 - head_t2) + a1 * b2) + a2 * b1) + a2 * b2;
1740 }
1741 {
1742 /* Compute double-double = double-double + double-double. */
1743 double bv;
1744 double s1, s2, t1, t2;
1745
1746 /* Add two hi words. */
1747 s1 = head_t1 + head_t2;
1748 bv = s1 - head_t1;
1749 s2 = ((head_t2 - bv) + (head_t1 - (s1 - bv)));
1750
1751 /* Add two lo words. */
1752 t1 = tail_t1 + tail_t2;
1753 bv = t1 - tail_t1;
1754 t2 = ((tail_t2 - bv) + (tail_t1 - (t1 - bv)));
1755
1756 s2 += t1;
1757
1758 /* Renormalize (s1, s2) to (t1, s2) */
1759 t1 = s1 + s2;
1760 s2 = s2 - (t1 - s1);
1761
1762 t2 += s2;
1763
1764 /* Renormalize (t1, t2) */
1765 head_t1 = t1 + t2;
1766 tail_t1 = t2 - (head_t1 - t1);
1767 }
1768 head_prod2[1] = head_t1;
1769 tail_prod2[1] = tail_t1;
1770 }
1771 }
1772 {
1773 double head_t, tail_t;
1774 double head_a, tail_a;
1775 double head_b, tail_b;
1776 /* Real part */
1777 head_a = head_sum2[0];
1778 tail_a = tail_sum2[0];
1779 head_b = head_prod2[0];
1780 tail_b = tail_prod2[0];
1781 {
1782 /* Compute double-double = double-double + double-double. */
1783 double bv;
1784 double s1, s2, t1, t2;
1785
1786 /* Add two hi words. */
1787 s1 = head_a + head_b;
1788 bv = s1 - head_a;
1789 s2 = ((head_b - bv) + (head_a - (s1 - bv)));
1790
1791 /* Add two lo words. */
1792 t1 = tail_a + tail_b;
1793 bv = t1 - tail_a;
1794 t2 = ((tail_b - bv) + (tail_a - (t1 - bv)));
1795
1796 s2 += t1;
1797
1798 /* Renormalize (s1, s2) to (t1, s2) */
1799 t1 = s1 + s2;
1800 s2 = s2 - (t1 - s1);
1801
1802 t2 += s2;
1803
1804 /* Renormalize (t1, t2) */
1805 head_t = t1 + t2;
1806 tail_t = t2 - (head_t - t1);
1807 }
1808 head_sum2[0] = head_t;
1809 tail_sum2[0] = tail_t;
1810 /* Imaginary part */
1811 head_a = head_sum2[1];
1812 tail_a = tail_sum2[1];
1813 head_b = head_prod2[1];
1814 tail_b = tail_prod2[1];
1815 {
1816 /* Compute double-double = double-double + double-double. */
1817 double bv;
1818 double s1, s2, t1, t2;
1819
1820 /* Add two hi words. */
1821 s1 = head_a + head_b;
1822 bv = s1 - head_a;
1823 s2 = ((head_b - bv) + (head_a - (s1 - bv)));
1824
1825 /* Add two lo words. */
1826 t1 = tail_a + tail_b;
1827 bv = t1 - tail_a;
1828 t2 = ((tail_b - bv) + (tail_a - (t1 - bv)));
1829
1830 s2 += t1;
1831
1832 /* Renormalize (s1, s2) to (t1, s2) */
1833 t1 = s1 + s2;
1834 s2 = s2 - (t1 - s1);
1835
1836 t2 += s2;
1837
1838 /* Renormalize (t1, t2) */
1839 head_t = t1 + t2;
1840 tail_t = t2 - (head_t - t1);
1841 }
1842 head_sum2[1] = head_t;
1843 tail_sum2[1] = tail_t;
1844 }
1845 }
1846 {
1847 double head_t, tail_t;
1848 double head_a, tail_a;
1849 double head_b, tail_b;
1850 /* Real part */
1851 head_a = head_sum1[0];
1852 tail_a = tail_sum1[0];
1853 head_b = head_sum2[0];
1854 tail_b = tail_sum2[0];
1855 {
1856 /* Compute double-double = double-double + double-double. */
1857 double bv;
1858 double s1, s2, t1, t2;
1859
1860 /* Add two hi words. */
1861 s1 = head_a + head_b;
1862 bv = s1 - head_a;
1863 s2 = ((head_b - bv) + (head_a - (s1 - bv)));
1864
1865 /* Add two lo words. */
1866 t1 = tail_a + tail_b;
1867 bv = t1 - tail_a;
1868 t2 = ((tail_b - bv) + (tail_a - (t1 - bv)));
1869
1870 s2 += t1;
1871
1872 /* Renormalize (s1, s2) to (t1, s2) */
1873 t1 = s1 + s2;
1874 s2 = s2 - (t1 - s1);
1875
1876 t2 += s2;
1877
1878 /* Renormalize (t1, t2) */
1879 head_t = t1 + t2;
1880 tail_t = t2 - (head_t - t1);
1881 }
1882 head_sum1[0] = head_t;
1883 tail_sum1[0] = tail_t;
1884 /* Imaginary part */
1885 head_a = head_sum1[1];
1886 tail_a = tail_sum1[1];
1887 head_b = head_sum2[1];
1888 tail_b = tail_sum2[1];
1889 {
1890 /* Compute double-double = double-double + double-double. */
1891 double bv;
1892 double s1, s2, t1, t2;
1893
1894 /* Add two hi words. */
1895 s1 = head_a + head_b;
1896 bv = s1 - head_a;
1897 s2 = ((head_b - bv) + (head_a - (s1 - bv)));
1898
1899 /* Add two lo words. */
1900 t1 = tail_a + tail_b;
1901 bv = t1 - tail_a;
1902 t2 = ((tail_b - bv) + (tail_a - (t1 - bv)));
1903
1904 s2 += t1;
1905
1906 /* Renormalize (s1, s2) to (t1, s2) */
1907 t1 = s1 + s2;
1908 s2 = s2 - (t1 - s1);
1909
1910 t2 += s2;
1911
1912 /* Renormalize (t1, t2) */
1913 head_t = t1 + t2;
1914 tail_t = t2 - (head_t - t1);
1915 }
1916 head_sum1[1] = head_t;
1917 tail_sum1[1] = tail_t;
1918 }
1919 {
1920 /* Compute complex-extra = complex-extra * complex-double. */
1921 double head_a0, tail_a0;
1922 double head_a1, tail_a1;
1923 double head_t1, tail_t1;
1924 double head_t2, tail_t2;
1925 head_a0 = head_sum1[0];
1926 tail_a0 = tail_sum1[0];
1927 head_a1 = head_sum1[1];
1928 tail_a1 = tail_sum1[1];
1929 /* real part */
1930 {
1931 /* Compute double-double = double-double * double. */
1932 double a11, a21, b1, b2, c11, c21, c2, con, t1, t2;
1933
1934 con = head_a0 * split;
1935 a11 = con - head_a0;
1936 a11 = con - a11;
1937 a21 = head_a0 - a11;
1938 con = alpha_i[0] * split;
1939 b1 = con - alpha_i[0];
1940 b1 = con - b1;
1941 b2 = alpha_i[0] - b1;
1942
1943 c11 = head_a0 * alpha_i[0];
1944 c21 = (((a11 * b1 - c11) + a11 * b2) + a21 * b1) + a21 * b2;
1945
1946 c2 = tail_a0 * alpha_i[0];
1947 t1 = c11 + c2;
1948 t2 = (c2 - (t1 - c11)) + c21;
1949
1950 head_t1 = t1 + t2;
1951 tail_t1 = t2 - (head_t1 - t1);
1952 }
1953 {
1954 /* Compute double-double = double-double * double. */
1955 double a11, a21, b1, b2, c11, c21, c2, con, t1, t2;
1956
1957 con = head_a1 * split;
1958 a11 = con - head_a1;
1959 a11 = con - a11;
1960 a21 = head_a1 - a11;
1961 con = alpha_i[1] * split;
1962 b1 = con - alpha_i[1];
1963 b1 = con - b1;
1964 b2 = alpha_i[1] - b1;
1965
1966 c11 = head_a1 * alpha_i[1];
1967 c21 = (((a11 * b1 - c11) + a11 * b2) + a21 * b1) + a21 * b2;
1968
1969 c2 = tail_a1 * alpha_i[1];
1970 t1 = c11 + c2;
1971 t2 = (c2 - (t1 - c11)) + c21;
1972
1973 head_t2 = t1 + t2;
1974 tail_t2 = t2 - (head_t2 - t1);
1975 }
1976 head_t2 = -head_t2;
1977 tail_t2 = -tail_t2;
1978 {
1979 /* Compute double-double = double-double + double-double. */
1980 double bv;
1981 double s1, s2, t1, t2;
1982
1983 /* Add two hi words. */
1984 s1 = head_t1 + head_t2;
1985 bv = s1 - head_t1;
1986 s2 = ((head_t2 - bv) + (head_t1 - (s1 - bv)));
1987
1988 /* Add two lo words. */
1989 t1 = tail_t1 + tail_t2;
1990 bv = t1 - tail_t1;
1991 t2 = ((tail_t2 - bv) + (tail_t1 - (t1 - bv)));
1992
1993 s2 += t1;
1994
1995 /* Renormalize (s1, s2) to (t1, s2) */
1996 t1 = s1 + s2;
1997 s2 = s2 - (t1 - s1);
1998
1999 t2 += s2;
2000
2001 /* Renormalize (t1, t2) */
2002 head_t1 = t1 + t2;
2003 tail_t1 = t2 - (head_t1 - t1);
2004 }
2005 head_tmp1[0] = head_t1;
2006 tail_tmp1[0] = tail_t1;
2007 /* imaginary part */
2008 {
2009 /* Compute double-double = double-double * double. */
2010 double a11, a21, b1, b2, c11, c21, c2, con, t1, t2;
2011
2012 con = head_a1 * split;
2013 a11 = con - head_a1;
2014 a11 = con - a11;
2015 a21 = head_a1 - a11;
2016 con = alpha_i[0] * split;
2017 b1 = con - alpha_i[0];
2018 b1 = con - b1;
2019 b2 = alpha_i[0] - b1;
2020
2021 c11 = head_a1 * alpha_i[0];
2022 c21 = (((a11 * b1 - c11) + a11 * b2) + a21 * b1) + a21 * b2;
2023
2024 c2 = tail_a1 * alpha_i[0];
2025 t1 = c11 + c2;
2026 t2 = (c2 - (t1 - c11)) + c21;
2027
2028 head_t1 = t1 + t2;
2029 tail_t1 = t2 - (head_t1 - t1);
2030 }
2031 {
2032 /* Compute double-double = double-double * double. */
2033 double a11, a21, b1, b2, c11, c21, c2, con, t1, t2;
2034
2035 con = head_a0 * split;
2036 a11 = con - head_a0;
2037 a11 = con - a11;
2038 a21 = head_a0 - a11;
2039 con = alpha_i[1] * split;
2040 b1 = con - alpha_i[1];
2041 b1 = con - b1;
2042 b2 = alpha_i[1] - b1;
2043
2044 c11 = head_a0 * alpha_i[1];
2045 c21 = (((a11 * b1 - c11) + a11 * b2) + a21 * b1) + a21 * b2;
2046
2047 c2 = tail_a0 * alpha_i[1];
2048 t1 = c11 + c2;
2049 t2 = (c2 - (t1 - c11)) + c21;
2050
2051 head_t2 = t1 + t2;
2052 tail_t2 = t2 - (head_t2 - t1);
2053 }
2054 {
2055 /* Compute double-double = double-double + double-double. */
2056 double bv;
2057 double s1, s2, t1, t2;
2058
2059 /* Add two hi words. */
2060 s1 = head_t1 + head_t2;
2061 bv = s1 - head_t1;
2062 s2 = ((head_t2 - bv) + (head_t1 - (s1 - bv)));
2063
2064 /* Add two lo words. */
2065 t1 = tail_t1 + tail_t2;
2066 bv = t1 - tail_t1;
2067 t2 = ((tail_t2 - bv) + (tail_t1 - (t1 - bv)));
2068
2069 s2 += t1;
2070
2071 /* Renormalize (s1, s2) to (t1, s2) */
2072 t1 = s1 + s2;
2073 s2 = s2 - (t1 - s1);
2074
2075 t2 += s2;
2076
2077 /* Renormalize (t1, t2) */
2078 head_t1 = t1 + t2;
2079 tail_t1 = t2 - (head_t1 - t1);
2080 }
2081 head_tmp1[1] = head_t1;
2082 tail_tmp1[1] = tail_t1;
2083 }
2084
2085 y_elem[0] = y_i[yi];
2086 y_elem[1] = y_i[yi + 1];
2087 {
2088 /* Compute complex-extra = complex-double * complex-double. */
2089 double head_t1, tail_t1;
2090 double head_t2, tail_t2;
2091 /* Real part */
2092 {
2093 /* Compute double_double = double * double. */
2094 double a1, a2, b1, b2, con;
2095
2096 con = y_elem[0] * split;
2097 a1 = con - y_elem[0];
2098 a1 = con - a1;
2099 a2 = y_elem[0] - a1;
2100 con = beta_i[0] * split;
2101 b1 = con - beta_i[0];
2102 b1 = con - b1;
2103 b2 = beta_i[0] - b1;
2104
2105 head_t1 = y_elem[0] * beta_i[0];
2106 tail_t1 = (((a1 * b1 - head_t1) + a1 * b2) + a2 * b1) + a2 * b2;
2107 }
2108 {
2109 /* Compute double_double = double * double. */
2110 double a1, a2, b1, b2, con;
2111
2112 con = y_elem[1] * split;
2113 a1 = con - y_elem[1];
2114 a1 = con - a1;
2115 a2 = y_elem[1] - a1;
2116 con = beta_i[1] * split;
2117 b1 = con - beta_i[1];
2118 b1 = con - b1;
2119 b2 = beta_i[1] - b1;
2120
2121 head_t2 = y_elem[1] * beta_i[1];
2122 tail_t2 = (((a1 * b1 - head_t2) + a1 * b2) + a2 * b1) + a2 * b2;
2123 }
2124 head_t2 = -head_t2;
2125 tail_t2 = -tail_t2;
2126 {
2127 /* Compute double-double = double-double + double-double. */
2128 double bv;
2129 double s1, s2, t1, t2;
2130
2131 /* Add two hi words. */
2132 s1 = head_t1 + head_t2;
2133 bv = s1 - head_t1;
2134 s2 = ((head_t2 - bv) + (head_t1 - (s1 - bv)));
2135
2136 /* Add two lo words. */
2137 t1 = tail_t1 + tail_t2;
2138 bv = t1 - tail_t1;
2139 t2 = ((tail_t2 - bv) + (tail_t1 - (t1 - bv)));
2140
2141 s2 += t1;
2142
2143 /* Renormalize (s1, s2) to (t1, s2) */
2144 t1 = s1 + s2;
2145 s2 = s2 - (t1 - s1);
2146
2147 t2 += s2;
2148
2149 /* Renormalize (t1, t2) */
2150 head_t1 = t1 + t2;
2151 tail_t1 = t2 - (head_t1 - t1);
2152 }
2153 head_tmp2[0] = head_t1;
2154 tail_tmp2[0] = tail_t1;
2155 /* Imaginary part */
2156 {
2157 /* Compute double_double = double * double. */
2158 double a1, a2, b1, b2, con;
2159
2160 con = y_elem[1] * split;
2161 a1 = con - y_elem[1];
2162 a1 = con - a1;
2163 a2 = y_elem[1] - a1;
2164 con = beta_i[0] * split;
2165 b1 = con - beta_i[0];
2166 b1 = con - b1;
2167 b2 = beta_i[0] - b1;
2168
2169 head_t1 = y_elem[1] * beta_i[0];
2170 tail_t1 = (((a1 * b1 - head_t1) + a1 * b2) + a2 * b1) + a2 * b2;
2171 }
2172 {
2173 /* Compute double_double = double * double. */
2174 double a1, a2, b1, b2, con;
2175
2176 con = y_elem[0] * split;
2177 a1 = con - y_elem[0];
2178 a1 = con - a1;
2179 a2 = y_elem[0] - a1;
2180 con = beta_i[1] * split;
2181 b1 = con - beta_i[1];
2182 b1 = con - b1;
2183 b2 = beta_i[1] - b1;
2184
2185 head_t2 = y_elem[0] * beta_i[1];
2186 tail_t2 = (((a1 * b1 - head_t2) + a1 * b2) + a2 * b1) + a2 * b2;
2187 }
2188 {
2189 /* Compute double-double = double-double + double-double. */
2190 double bv;
2191 double s1, s2, t1, t2;
2192
2193 /* Add two hi words. */
2194 s1 = head_t1 + head_t2;
2195 bv = s1 - head_t1;
2196 s2 = ((head_t2 - bv) + (head_t1 - (s1 - bv)));
2197
2198 /* Add two lo words. */
2199 t1 = tail_t1 + tail_t2;
2200 bv = t1 - tail_t1;
2201 t2 = ((tail_t2 - bv) + (tail_t1 - (t1 - bv)));
2202
2203 s2 += t1;
2204
2205 /* Renormalize (s1, s2) to (t1, s2) */
2206 t1 = s1 + s2;
2207 s2 = s2 - (t1 - s1);
2208
2209 t2 += s2;
2210
2211 /* Renormalize (t1, t2) */
2212 head_t1 = t1 + t2;
2213 tail_t1 = t2 - (head_t1 - t1);
2214 }
2215 head_tmp2[1] = head_t1;
2216 tail_tmp2[1] = tail_t1;
2217 }
2218 {
2219 double head_t, tail_t;
2220 double head_a, tail_a;
2221 double head_b, tail_b;
2222 /* Real part */
2223 head_a = head_tmp1[0];
2224 tail_a = tail_tmp1[0];
2225 head_b = head_tmp2[0];
2226 tail_b = tail_tmp2[0];
2227 {
2228 /* Compute double-double = double-double + double-double. */
2229 double bv;
2230 double s1, s2, t1, t2;
2231
2232 /* Add two hi words. */
2233 s1 = head_a + head_b;
2234 bv = s1 - head_a;
2235 s2 = ((head_b - bv) + (head_a - (s1 - bv)));
2236
2237 /* Add two lo words. */
2238 t1 = tail_a + tail_b;
2239 bv = t1 - tail_a;
2240 t2 = ((tail_b - bv) + (tail_a - (t1 - bv)));
2241
2242 s2 += t1;
2243
2244 /* Renormalize (s1, s2) to (t1, s2) */
2245 t1 = s1 + s2;
2246 s2 = s2 - (t1 - s1);
2247
2248 t2 += s2;
2249
2250 /* Renormalize (t1, t2) */
2251 head_t = t1 + t2;
2252 tail_t = t2 - (head_t - t1);
2253 }
2254 head_tmp3[0] = head_t;
2255 tail_tmp3[0] = tail_t;
2256 /* Imaginary part */
2257 head_a = head_tmp1[1];
2258 tail_a = tail_tmp1[1];
2259 head_b = head_tmp2[1];
2260 tail_b = tail_tmp2[1];
2261 {
2262 /* Compute double-double = double-double + double-double. */
2263 double bv;
2264 double s1, s2, t1, t2;
2265
2266 /* Add two hi words. */
2267 s1 = head_a + head_b;
2268 bv = s1 - head_a;
2269 s2 = ((head_b - bv) + (head_a - (s1 - bv)));
2270
2271 /* Add two lo words. */
2272 t1 = tail_a + tail_b;
2273 bv = t1 - tail_a;
2274 t2 = ((tail_b - bv) + (tail_a - (t1 - bv)));
2275
2276 s2 += t1;
2277
2278 /* Renormalize (s1, s2) to (t1, s2) */
2279 t1 = s1 + s2;
2280 s2 = s2 - (t1 - s1);
2281
2282 t2 += s2;
2283
2284 /* Renormalize (t1, t2) */
2285 head_t = t1 + t2;
2286 tail_t = t2 - (head_t - t1);
2287 }
2288 head_tmp3[1] = head_t;
2289 tail_tmp3[1] = tail_t;
2290 }
2291 y_i[yi] = head_tmp3[0];
2292 y_i[yi + 1] = head_tmp3[1];
2293 }
2294 } else {
2295 /* uplo == blas_upper */
2296 for (i = 0, yi = yi0, ai = 0; i < n; i++, yi += incy, ai += incai) {
2297 head_sum1[0] = head_sum1[1] = tail_sum1[0] = tail_sum1[1] = 0.0;
2298 head_sum2[0] = head_sum2[1] = tail_sum2[0] = tail_sum2[1] = 0.0;
2299
2300 for (j = 0, aij = ai, xi = xi0; j < i;
2301 j++, aij += incaij, xi += incx) {
2302 a_elem[0] = a_i[aij];
2303 a_elem[1] = a_i[aij + 1];
2304 a_elem[1] = -a_elem[1];
2305 x_elem[0] = x_head_i[xi];
2306 x_elem[1] = x_head_i[xi + 1];
2307 {
2308 double cd[2];
2309 cd[0] = (double) a_elem[0];
2310 cd[1] = (double) a_elem[1];
2311 {
2312 /* Compute complex-extra = complex-double * complex-double. */
2313 double head_t1, tail_t1;
2314 double head_t2, tail_t2;
2315 /* Real part */
2316 {
2317 /* Compute double_double = double * double. */
2318 double a1, a2, b1, b2, con;
2319
2320 con = x_elem[0] * split;
2321 a1 = con - x_elem[0];
2322 a1 = con - a1;
2323 a2 = x_elem[0] - a1;
2324 con = cd[0] * split;
2325 b1 = con - cd[0];
2326 b1 = con - b1;
2327 b2 = cd[0] - b1;
2328
2329 head_t1 = x_elem[0] * cd[0];
2330 tail_t1 =
2331 (((a1 * b1 - head_t1) + a1 * b2) + a2 * b1) + a2 * b2;
2332 }
2333 {
2334 /* Compute double_double = double * double. */
2335 double a1, a2, b1, b2, con;
2336
2337 con = x_elem[1] * split;
2338 a1 = con - x_elem[1];
2339 a1 = con - a1;
2340 a2 = x_elem[1] - a1;
2341 con = cd[1] * split;
2342 b1 = con - cd[1];
2343 b1 = con - b1;
2344 b2 = cd[1] - b1;
2345
2346 head_t2 = x_elem[1] * cd[1];
2347 tail_t2 =
2348 (((a1 * b1 - head_t2) + a1 * b2) + a2 * b1) + a2 * b2;
2349 }
2350 head_t2 = -head_t2;
2351 tail_t2 = -tail_t2;
2352 {
2353 /* Compute double-double = double-double + double-double. */
2354 double bv;
2355 double s1, s2, t1, t2;
2356
2357 /* Add two hi words. */
2358 s1 = head_t1 + head_t2;
2359 bv = s1 - head_t1;
2360 s2 = ((head_t2 - bv) + (head_t1 - (s1 - bv)));
2361
2362 /* Add two lo words. */
2363 t1 = tail_t1 + tail_t2;
2364 bv = t1 - tail_t1;
2365 t2 = ((tail_t2 - bv) + (tail_t1 - (t1 - bv)));
2366
2367 s2 += t1;
2368
2369 /* Renormalize (s1, s2) to (t1, s2) */
2370 t1 = s1 + s2;
2371 s2 = s2 - (t1 - s1);
2372
2373 t2 += s2;
2374
2375 /* Renormalize (t1, t2) */
2376 head_t1 = t1 + t2;
2377 tail_t1 = t2 - (head_t1 - t1);
2378 }
2379 head_prod1[0] = head_t1;
2380 tail_prod1[0] = tail_t1;
2381 /* Imaginary part */
2382 {
2383 /* Compute double_double = double * double. */
2384 double a1, a2, b1, b2, con;
2385
2386 con = x_elem[1] * split;
2387 a1 = con - x_elem[1];
2388 a1 = con - a1;
2389 a2 = x_elem[1] - a1;
2390 con = cd[0] * split;
2391 b1 = con - cd[0];
2392 b1 = con - b1;
2393 b2 = cd[0] - b1;
2394
2395 head_t1 = x_elem[1] * cd[0];
2396 tail_t1 =
2397 (((a1 * b1 - head_t1) + a1 * b2) + a2 * b1) + a2 * b2;
2398 }
2399 {
2400 /* Compute double_double = double * double. */
2401 double a1, a2, b1, b2, con;
2402
2403 con = x_elem[0] * split;
2404 a1 = con - x_elem[0];
2405 a1 = con - a1;
2406 a2 = x_elem[0] - a1;
2407 con = cd[1] * split;
2408 b1 = con - cd[1];
2409 b1 = con - b1;
2410 b2 = cd[1] - b1;
2411
2412 head_t2 = x_elem[0] * cd[1];
2413 tail_t2 =
2414 (((a1 * b1 - head_t2) + a1 * b2) + a2 * b1) + a2 * b2;
2415 }
2416 {
2417 /* Compute double-double = double-double + double-double. */
2418 double bv;
2419 double s1, s2, t1, t2;
2420
2421 /* Add two hi words. */
2422 s1 = head_t1 + head_t2;
2423 bv = s1 - head_t1;
2424 s2 = ((head_t2 - bv) + (head_t1 - (s1 - bv)));
2425
2426 /* Add two lo words. */
2427 t1 = tail_t1 + tail_t2;
2428 bv = t1 - tail_t1;
2429 t2 = ((tail_t2 - bv) + (tail_t1 - (t1 - bv)));
2430
2431 s2 += t1;
2432
2433 /* Renormalize (s1, s2) to (t1, s2) */
2434 t1 = s1 + s2;
2435 s2 = s2 - (t1 - s1);
2436
2437 t2 += s2;
2438
2439 /* Renormalize (t1, t2) */
2440 head_t1 = t1 + t2;
2441 tail_t1 = t2 - (head_t1 - t1);
2442 }
2443 head_prod1[1] = head_t1;
2444 tail_prod1[1] = tail_t1;
2445 }
2446 }
2447 {
2448 double head_t, tail_t;
2449 double head_a, tail_a;
2450 double head_b, tail_b;
2451 /* Real part */
2452 head_a = head_sum1[0];
2453 tail_a = tail_sum1[0];
2454 head_b = head_prod1[0];
2455 tail_b = tail_prod1[0];
2456 {
2457 /* Compute double-double = double-double + double-double. */
2458 double bv;
2459 double s1, s2, t1, t2;
2460
2461 /* Add two hi words. */
2462 s1 = head_a + head_b;
2463 bv = s1 - head_a;
2464 s2 = ((head_b - bv) + (head_a - (s1 - bv)));
2465
2466 /* Add two lo words. */
2467 t1 = tail_a + tail_b;
2468 bv = t1 - tail_a;
2469 t2 = ((tail_b - bv) + (tail_a - (t1 - bv)));
2470
2471 s2 += t1;
2472
2473 /* Renormalize (s1, s2) to (t1, s2) */
2474 t1 = s1 + s2;
2475 s2 = s2 - (t1 - s1);
2476
2477 t2 += s2;
2478
2479 /* Renormalize (t1, t2) */
2480 head_t = t1 + t2;
2481 tail_t = t2 - (head_t - t1);
2482 }
2483 head_sum1[0] = head_t;
2484 tail_sum1[0] = tail_t;
2485 /* Imaginary part */
2486 head_a = head_sum1[1];
2487 tail_a = tail_sum1[1];
2488 head_b = head_prod1[1];
2489 tail_b = tail_prod1[1];
2490 {
2491 /* Compute double-double = double-double + double-double. */
2492 double bv;
2493 double s1, s2, t1, t2;
2494
2495 /* Add two hi words. */
2496 s1 = head_a + head_b;
2497 bv = s1 - head_a;
2498 s2 = ((head_b - bv) + (head_a - (s1 - bv)));
2499
2500 /* Add two lo words. */
2501 t1 = tail_a + tail_b;
2502 bv = t1 - tail_a;
2503 t2 = ((tail_b - bv) + (tail_a - (t1 - bv)));
2504
2505 s2 += t1;
2506
2507 /* Renormalize (s1, s2) to (t1, s2) */
2508 t1 = s1 + s2;
2509 s2 = s2 - (t1 - s1);
2510
2511 t2 += s2;
2512
2513 /* Renormalize (t1, t2) */
2514 head_t = t1 + t2;
2515 tail_t = t2 - (head_t - t1);
2516 }
2517 head_sum1[1] = head_t;
2518 tail_sum1[1] = tail_t;
2519 }
2520 x_elem[0] = x_tail_i[xi];
2521 x_elem[1] = x_tail_i[xi + 1];
2522 {
2523 double cd[2];
2524 cd[0] = (double) a_elem[0];
2525 cd[1] = (double) a_elem[1];
2526 {
2527 /* Compute complex-extra = complex-double * complex-double. */
2528 double head_t1, tail_t1;
2529 double head_t2, tail_t2;
2530 /* Real part */
2531 {
2532 /* Compute double_double = double * double. */
2533 double a1, a2, b1, b2, con;
2534
2535 con = x_elem[0] * split;
2536 a1 = con - x_elem[0];
2537 a1 = con - a1;
2538 a2 = x_elem[0] - a1;
2539 con = cd[0] * split;
2540 b1 = con - cd[0];
2541 b1 = con - b1;
2542 b2 = cd[0] - b1;
2543
2544 head_t1 = x_elem[0] * cd[0];
2545 tail_t1 =
2546 (((a1 * b1 - head_t1) + a1 * b2) + a2 * b1) + a2 * b2;
2547 }
2548 {
2549 /* Compute double_double = double * double. */
2550 double a1, a2, b1, b2, con;
2551
2552 con = x_elem[1] * split;
2553 a1 = con - x_elem[1];
2554 a1 = con - a1;
2555 a2 = x_elem[1] - a1;
2556 con = cd[1] * split;
2557 b1 = con - cd[1];
2558 b1 = con - b1;
2559 b2 = cd[1] - b1;
2560
2561 head_t2 = x_elem[1] * cd[1];
2562 tail_t2 =
2563 (((a1 * b1 - head_t2) + a1 * b2) + a2 * b1) + a2 * b2;
2564 }
2565 head_t2 = -head_t2;
2566 tail_t2 = -tail_t2;
2567 {
2568 /* Compute double-double = double-double + double-double. */
2569 double bv;
2570 double s1, s2, t1, t2;
2571
2572 /* Add two hi words. */
2573 s1 = head_t1 + head_t2;
2574 bv = s1 - head_t1;
2575 s2 = ((head_t2 - bv) + (head_t1 - (s1 - bv)));
2576
2577 /* Add two lo words. */
2578 t1 = tail_t1 + tail_t2;
2579 bv = t1 - tail_t1;
2580 t2 = ((tail_t2 - bv) + (tail_t1 - (t1 - bv)));
2581
2582 s2 += t1;
2583
2584 /* Renormalize (s1, s2) to (t1, s2) */
2585 t1 = s1 + s2;
2586 s2 = s2 - (t1 - s1);
2587
2588 t2 += s2;
2589
2590 /* Renormalize (t1, t2) */
2591 head_t1 = t1 + t2;
2592 tail_t1 = t2 - (head_t1 - t1);
2593 }
2594 head_prod2[0] = head_t1;
2595 tail_prod2[0] = tail_t1;
2596 /* Imaginary part */
2597 {
2598 /* Compute double_double = double * double. */
2599 double a1, a2, b1, b2, con;
2600
2601 con = x_elem[1] * split;
2602 a1 = con - x_elem[1];
2603 a1 = con - a1;
2604 a2 = x_elem[1] - a1;
2605 con = cd[0] * split;
2606 b1 = con - cd[0];
2607 b1 = con - b1;
2608 b2 = cd[0] - b1;
2609
2610 head_t1 = x_elem[1] * cd[0];
2611 tail_t1 =
2612 (((a1 * b1 - head_t1) + a1 * b2) + a2 * b1) + a2 * b2;
2613 }
2614 {
2615 /* Compute double_double = double * double. */
2616 double a1, a2, b1, b2, con;
2617
2618 con = x_elem[0] * split;
2619 a1 = con - x_elem[0];
2620 a1 = con - a1;
2621 a2 = x_elem[0] - a1;
2622 con = cd[1] * split;
2623 b1 = con - cd[1];
2624 b1 = con - b1;
2625 b2 = cd[1] - b1;
2626
2627 head_t2 = x_elem[0] * cd[1];
2628 tail_t2 =
2629 (((a1 * b1 - head_t2) + a1 * b2) + a2 * b1) + a2 * b2;
2630 }
2631 {
2632 /* Compute double-double = double-double + double-double. */
2633 double bv;
2634 double s1, s2, t1, t2;
2635
2636 /* Add two hi words. */
2637 s1 = head_t1 + head_t2;
2638 bv = s1 - head_t1;
2639 s2 = ((head_t2 - bv) + (head_t1 - (s1 - bv)));
2640
2641 /* Add two lo words. */
2642 t1 = tail_t1 + tail_t2;
2643 bv = t1 - tail_t1;
2644 t2 = ((tail_t2 - bv) + (tail_t1 - (t1 - bv)));
2645
2646 s2 += t1;
2647
2648 /* Renormalize (s1, s2) to (t1, s2) */
2649 t1 = s1 + s2;
2650 s2 = s2 - (t1 - s1);
2651
2652 t2 += s2;
2653
2654 /* Renormalize (t1, t2) */
2655 head_t1 = t1 + t2;
2656 tail_t1 = t2 - (head_t1 - t1);
2657 }
2658 head_prod2[1] = head_t1;
2659 tail_prod2[1] = tail_t1;
2660 }
2661 }
2662 {
2663 double head_t, tail_t;
2664 double head_a, tail_a;
2665 double head_b, tail_b;
2666 /* Real part */
2667 head_a = head_sum2[0];
2668 tail_a = tail_sum2[0];
2669 head_b = head_prod2[0];
2670 tail_b = tail_prod2[0];
2671 {
2672 /* Compute double-double = double-double + double-double. */
2673 double bv;
2674 double s1, s2, t1, t2;
2675
2676 /* Add two hi words. */
2677 s1 = head_a + head_b;
2678 bv = s1 - head_a;
2679 s2 = ((head_b - bv) + (head_a - (s1 - bv)));
2680
2681 /* Add two lo words. */
2682 t1 = tail_a + tail_b;
2683 bv = t1 - tail_a;
2684 t2 = ((tail_b - bv) + (tail_a - (t1 - bv)));
2685
2686 s2 += t1;
2687
2688 /* Renormalize (s1, s2) to (t1, s2) */
2689 t1 = s1 + s2;
2690 s2 = s2 - (t1 - s1);
2691
2692 t2 += s2;
2693
2694 /* Renormalize (t1, t2) */
2695 head_t = t1 + t2;
2696 tail_t = t2 - (head_t - t1);
2697 }
2698 head_sum2[0] = head_t;
2699 tail_sum2[0] = tail_t;
2700 /* Imaginary part */
2701 head_a = head_sum2[1];
2702 tail_a = tail_sum2[1];
2703 head_b = head_prod2[1];
2704 tail_b = tail_prod2[1];
2705 {
2706 /* Compute double-double = double-double + double-double. */
2707 double bv;
2708 double s1, s2, t1, t2;
2709
2710 /* Add two hi words. */
2711 s1 = head_a + head_b;
2712 bv = s1 - head_a;
2713 s2 = ((head_b - bv) + (head_a - (s1 - bv)));
2714
2715 /* Add two lo words. */
2716 t1 = tail_a + tail_b;
2717 bv = t1 - tail_a;
2718 t2 = ((tail_b - bv) + (tail_a - (t1 - bv)));
2719
2720 s2 += t1;
2721
2722 /* Renormalize (s1, s2) to (t1, s2) */
2723 t1 = s1 + s2;
2724 s2 = s2 - (t1 - s1);
2725
2726 t2 += s2;
2727
2728 /* Renormalize (t1, t2) */
2729 head_t = t1 + t2;
2730 tail_t = t2 - (head_t - t1);
2731 }
2732 head_sum2[1] = head_t;
2733 tail_sum2[1] = tail_t;
2734 }
2735 }
2736
2737 diag_elem = a_i[aij];
2738 x_elem[0] = x_head_i[xi];
2739 x_elem[1] = x_head_i[xi + 1];
2740 {
2741 double dt = (double) diag_elem;
2742 {
2743 /* Compute complex-extra = complex-double * real. */
2744 double head_t, tail_t;
2745 {
2746 /* Compute double_double = double * double. */
2747 double a1, a2, b1, b2, con;
2748
2749 con = dt * split;
2750 a1 = con - dt;
2751 a1 = con - a1;
2752 a2 = dt - a1;
2753 con = x_elem[0] * split;
2754 b1 = con - x_elem[0];
2755 b1 = con - b1;
2756 b2 = x_elem[0] - b1;
2757
2758 head_t = dt * x_elem[0];
2759 tail_t = (((a1 * b1 - head_t) + a1 * b2) + a2 * b1) + a2 * b2;
2760 }
2761 head_prod1[0] = head_t;
2762 tail_prod1[0] = tail_t;
2763 {
2764 /* Compute double_double = double * double. */
2765 double a1, a2, b1, b2, con;
2766
2767 con = dt * split;
2768 a1 = con - dt;
2769 a1 = con - a1;
2770 a2 = dt - a1;
2771 con = x_elem[1] * split;
2772 b1 = con - x_elem[1];
2773 b1 = con - b1;
2774 b2 = x_elem[1] - b1;
2775
2776 head_t = dt * x_elem[1];
2777 tail_t = (((a1 * b1 - head_t) + a1 * b2) + a2 * b1) + a2 * b2;
2778 }
2779 head_prod1[1] = head_t;
2780 tail_prod1[1] = tail_t;
2781 }
2782 }
2783 {
2784 double head_t, tail_t;
2785 double head_a, tail_a;
2786 double head_b, tail_b;
2787 /* Real part */
2788 head_a = head_sum1[0];
2789 tail_a = tail_sum1[0];
2790 head_b = head_prod1[0];
2791 tail_b = tail_prod1[0];
2792 {
2793 /* Compute double-double = double-double + double-double. */
2794 double bv;
2795 double s1, s2, t1, t2;
2796
2797 /* Add two hi words. */
2798 s1 = head_a + head_b;
2799 bv = s1 - head_a;
2800 s2 = ((head_b - bv) + (head_a - (s1 - bv)));
2801
2802 /* Add two lo words. */
2803 t1 = tail_a + tail_b;
2804 bv = t1 - tail_a;
2805 t2 = ((tail_b - bv) + (tail_a - (t1 - bv)));
2806
2807 s2 += t1;
2808
2809 /* Renormalize (s1, s2) to (t1, s2) */
2810 t1 = s1 + s2;
2811 s2 = s2 - (t1 - s1);
2812
2813 t2 += s2;
2814
2815 /* Renormalize (t1, t2) */
2816 head_t = t1 + t2;
2817 tail_t = t2 - (head_t - t1);
2818 }
2819 head_sum1[0] = head_t;
2820 tail_sum1[0] = tail_t;
2821 /* Imaginary part */
2822 head_a = head_sum1[1];
2823 tail_a = tail_sum1[1];
2824 head_b = head_prod1[1];
2825 tail_b = tail_prod1[1];
2826 {
2827 /* Compute double-double = double-double + double-double. */
2828 double bv;
2829 double s1, s2, t1, t2;
2830
2831 /* Add two hi words. */
2832 s1 = head_a + head_b;
2833 bv = s1 - head_a;
2834 s2 = ((head_b - bv) + (head_a - (s1 - bv)));
2835
2836 /* Add two lo words. */
2837 t1 = tail_a + tail_b;
2838 bv = t1 - tail_a;
2839 t2 = ((tail_b - bv) + (tail_a - (t1 - bv)));
2840
2841 s2 += t1;
2842
2843 /* Renormalize (s1, s2) to (t1, s2) */
2844 t1 = s1 + s2;
2845 s2 = s2 - (t1 - s1);
2846
2847 t2 += s2;
2848
2849 /* Renormalize (t1, t2) */
2850 head_t = t1 + t2;
2851 tail_t = t2 - (head_t - t1);
2852 }
2853 head_sum1[1] = head_t;
2854 tail_sum1[1] = tail_t;
2855 }
2856 x_elem[0] = x_tail_i[xi];
2857 x_elem[1] = x_tail_i[xi + 1];
2858 {
2859 double dt = (double) diag_elem;
2860 {
2861 /* Compute complex-extra = complex-double * real. */
2862 double head_t, tail_t;
2863 {
2864 /* Compute double_double = double * double. */
2865 double a1, a2, b1, b2, con;
2866
2867 con = dt * split;
2868 a1 = con - dt;
2869 a1 = con - a1;
2870 a2 = dt - a1;
2871 con = x_elem[0] * split;
2872 b1 = con - x_elem[0];
2873 b1 = con - b1;
2874 b2 = x_elem[0] - b1;
2875
2876 head_t = dt * x_elem[0];
2877 tail_t = (((a1 * b1 - head_t) + a1 * b2) + a2 * b1) + a2 * b2;
2878 }
2879 head_prod2[0] = head_t;
2880 tail_prod2[0] = tail_t;
2881 {
2882 /* Compute double_double = double * double. */
2883 double a1, a2, b1, b2, con;
2884
2885 con = dt * split;
2886 a1 = con - dt;
2887 a1 = con - a1;
2888 a2 = dt - a1;
2889 con = x_elem[1] * split;
2890 b1 = con - x_elem[1];
2891 b1 = con - b1;
2892 b2 = x_elem[1] - b1;
2893
2894 head_t = dt * x_elem[1];
2895 tail_t = (((a1 * b1 - head_t) + a1 * b2) + a2 * b1) + a2 * b2;
2896 }
2897 head_prod2[1] = head_t;
2898 tail_prod2[1] = tail_t;
2899 }
2900 }
2901 {
2902 double head_t, tail_t;
2903 double head_a, tail_a;
2904 double head_b, tail_b;
2905 /* Real part */
2906 head_a = head_sum2[0];
2907 tail_a = tail_sum2[0];
2908 head_b = head_prod2[0];
2909 tail_b = tail_prod2[0];
2910 {
2911 /* Compute double-double = double-double + double-double. */
2912 double bv;
2913 double s1, s2, t1, t2;
2914
2915 /* Add two hi words. */
2916 s1 = head_a + head_b;
2917 bv = s1 - head_a;
2918 s2 = ((head_b - bv) + (head_a - (s1 - bv)));
2919
2920 /* Add two lo words. */
2921 t1 = tail_a + tail_b;
2922 bv = t1 - tail_a;
2923 t2 = ((tail_b - bv) + (tail_a - (t1 - bv)));
2924
2925 s2 += t1;
2926
2927 /* Renormalize (s1, s2) to (t1, s2) */
2928 t1 = s1 + s2;
2929 s2 = s2 - (t1 - s1);
2930
2931 t2 += s2;
2932
2933 /* Renormalize (t1, t2) */
2934 head_t = t1 + t2;
2935 tail_t = t2 - (head_t - t1);
2936 }
2937 head_sum2[0] = head_t;
2938 tail_sum2[0] = tail_t;
2939 /* Imaginary part */
2940 head_a = head_sum2[1];
2941 tail_a = tail_sum2[1];
2942 head_b = head_prod2[1];
2943 tail_b = tail_prod2[1];
2944 {
2945 /* Compute double-double = double-double + double-double. */
2946 double bv;
2947 double s1, s2, t1, t2;
2948
2949 /* Add two hi words. */
2950 s1 = head_a + head_b;
2951 bv = s1 - head_a;
2952 s2 = ((head_b - bv) + (head_a - (s1 - bv)));
2953
2954 /* Add two lo words. */
2955 t1 = tail_a + tail_b;
2956 bv = t1 - tail_a;
2957 t2 = ((tail_b - bv) + (tail_a - (t1 - bv)));
2958
2959 s2 += t1;
2960
2961 /* Renormalize (s1, s2) to (t1, s2) */
2962 t1 = s1 + s2;
2963 s2 = s2 - (t1 - s1);
2964
2965 t2 += s2;
2966
2967 /* Renormalize (t1, t2) */
2968 head_t = t1 + t2;
2969 tail_t = t2 - (head_t - t1);
2970 }
2971 head_sum2[1] = head_t;
2972 tail_sum2[1] = tail_t;
2973 }
2974 j++;
2975 aij += incaij2;
2976 xi += incx;
2977
2978 for (; j < n; j++, aij += incaij2, xi += incx) {
2979 a_elem[0] = a_i[aij];
2980 a_elem[1] = a_i[aij + 1];
2981 x_elem[0] = x_head_i[xi];
2982 x_elem[1] = x_head_i[xi + 1];
2983 {
2984 double cd[2];
2985 cd[0] = (double) a_elem[0];
2986 cd[1] = (double) a_elem[1];
2987 {
2988 /* Compute complex-extra = complex-double * complex-double. */
2989 double head_t1, tail_t1;
2990 double head_t2, tail_t2;
2991 /* Real part */
2992 {
2993 /* Compute double_double = double * double. */
2994 double a1, a2, b1, b2, con;
2995
2996 con = x_elem[0] * split;
2997 a1 = con - x_elem[0];
2998 a1 = con - a1;
2999 a2 = x_elem[0] - a1;
3000 con = cd[0] * split;
3001 b1 = con - cd[0];
3002 b1 = con - b1;
3003 b2 = cd[0] - b1;
3004
3005 head_t1 = x_elem[0] * cd[0];
3006 tail_t1 =
3007 (((a1 * b1 - head_t1) + a1 * b2) + a2 * b1) + a2 * b2;
3008 }
3009 {
3010 /* Compute double_double = double * double. */
3011 double a1, a2, b1, b2, con;
3012
3013 con = x_elem[1] * split;
3014 a1 = con - x_elem[1];
3015 a1 = con - a1;
3016 a2 = x_elem[1] - a1;
3017 con = cd[1] * split;
3018 b1 = con - cd[1];
3019 b1 = con - b1;
3020 b2 = cd[1] - b1;
3021
3022 head_t2 = x_elem[1] * cd[1];
3023 tail_t2 =
3024 (((a1 * b1 - head_t2) + a1 * b2) + a2 * b1) + a2 * b2;
3025 }
3026 head_t2 = -head_t2;
3027 tail_t2 = -tail_t2;
3028 {
3029 /* Compute double-double = double-double + double-double. */
3030 double bv;
3031 double s1, s2, t1, t2;
3032
3033 /* Add two hi words. */
3034 s1 = head_t1 + head_t2;
3035 bv = s1 - head_t1;
3036 s2 = ((head_t2 - bv) + (head_t1 - (s1 - bv)));
3037
3038 /* Add two lo words. */
3039 t1 = tail_t1 + tail_t2;
3040 bv = t1 - tail_t1;
3041 t2 = ((tail_t2 - bv) + (tail_t1 - (t1 - bv)));
3042
3043 s2 += t1;
3044
3045 /* Renormalize (s1, s2) to (t1, s2) */
3046 t1 = s1 + s2;
3047 s2 = s2 - (t1 - s1);
3048
3049 t2 += s2;
3050
3051 /* Renormalize (t1, t2) */
3052 head_t1 = t1 + t2;
3053 tail_t1 = t2 - (head_t1 - t1);
3054 }
3055 head_prod1[0] = head_t1;
3056 tail_prod1[0] = tail_t1;
3057 /* Imaginary part */
3058 {
3059 /* Compute double_double = double * double. */
3060 double a1, a2, b1, b2, con;
3061
3062 con = x_elem[1] * split;
3063 a1 = con - x_elem[1];
3064 a1 = con - a1;
3065 a2 = x_elem[1] - a1;
3066 con = cd[0] * split;
3067 b1 = con - cd[0];
3068 b1 = con - b1;
3069 b2 = cd[0] - b1;
3070
3071 head_t1 = x_elem[1] * cd[0];
3072 tail_t1 =
3073 (((a1 * b1 - head_t1) + a1 * b2) + a2 * b1) + a2 * b2;
3074 }
3075 {
3076 /* Compute double_double = double * double. */
3077 double a1, a2, b1, b2, con;
3078
3079 con = x_elem[0] * split;
3080 a1 = con - x_elem[0];
3081 a1 = con - a1;
3082 a2 = x_elem[0] - a1;
3083 con = cd[1] * split;
3084 b1 = con - cd[1];
3085 b1 = con - b1;
3086 b2 = cd[1] - b1;
3087
3088 head_t2 = x_elem[0] * cd[1];
3089 tail_t2 =
3090 (((a1 * b1 - head_t2) + a1 * b2) + a2 * b1) + a2 * b2;
3091 }
3092 {
3093 /* Compute double-double = double-double + double-double. */
3094 double bv;
3095 double s1, s2, t1, t2;
3096
3097 /* Add two hi words. */
3098 s1 = head_t1 + head_t2;
3099 bv = s1 - head_t1;
3100 s2 = ((head_t2 - bv) + (head_t1 - (s1 - bv)));
3101
3102 /* Add two lo words. */
3103 t1 = tail_t1 + tail_t2;
3104 bv = t1 - tail_t1;
3105 t2 = ((tail_t2 - bv) + (tail_t1 - (t1 - bv)));
3106
3107 s2 += t1;
3108
3109 /* Renormalize (s1, s2) to (t1, s2) */
3110 t1 = s1 + s2;
3111 s2 = s2 - (t1 - s1);
3112
3113 t2 += s2;
3114
3115 /* Renormalize (t1, t2) */
3116 head_t1 = t1 + t2;
3117 tail_t1 = t2 - (head_t1 - t1);
3118 }
3119 head_prod1[1] = head_t1;
3120 tail_prod1[1] = tail_t1;
3121 }
3122 }
3123 {
3124 double head_t, tail_t;
3125 double head_a, tail_a;
3126 double head_b, tail_b;
3127 /* Real part */
3128 head_a = head_sum1[0];
3129 tail_a = tail_sum1[0];
3130 head_b = head_prod1[0];
3131 tail_b = tail_prod1[0];
3132 {
3133 /* Compute double-double = double-double + double-double. */
3134 double bv;
3135 double s1, s2, t1, t2;
3136
3137 /* Add two hi words. */
3138 s1 = head_a + head_b;
3139 bv = s1 - head_a;
3140 s2 = ((head_b - bv) + (head_a - (s1 - bv)));
3141
3142 /* Add two lo words. */
3143 t1 = tail_a + tail_b;
3144 bv = t1 - tail_a;
3145 t2 = ((tail_b - bv) + (tail_a - (t1 - bv)));
3146
3147 s2 += t1;
3148
3149 /* Renormalize (s1, s2) to (t1, s2) */
3150 t1 = s1 + s2;
3151 s2 = s2 - (t1 - s1);
3152
3153 t2 += s2;
3154
3155 /* Renormalize (t1, t2) */
3156 head_t = t1 + t2;
3157 tail_t = t2 - (head_t - t1);
3158 }
3159 head_sum1[0] = head_t;
3160 tail_sum1[0] = tail_t;
3161 /* Imaginary part */
3162 head_a = head_sum1[1];
3163 tail_a = tail_sum1[1];
3164 head_b = head_prod1[1];
3165 tail_b = tail_prod1[1];
3166 {
3167 /* Compute double-double = double-double + double-double. */
3168 double bv;
3169 double s1, s2, t1, t2;
3170
3171 /* Add two hi words. */
3172 s1 = head_a + head_b;
3173 bv = s1 - head_a;
3174 s2 = ((head_b - bv) + (head_a - (s1 - bv)));
3175
3176 /* Add two lo words. */
3177 t1 = tail_a + tail_b;
3178 bv = t1 - tail_a;
3179 t2 = ((tail_b - bv) + (tail_a - (t1 - bv)));
3180
3181 s2 += t1;
3182
3183 /* Renormalize (s1, s2) to (t1, s2) */
3184 t1 = s1 + s2;
3185 s2 = s2 - (t1 - s1);
3186
3187 t2 += s2;
3188
3189 /* Renormalize (t1, t2) */
3190 head_t = t1 + t2;
3191 tail_t = t2 - (head_t - t1);
3192 }
3193 head_sum1[1] = head_t;
3194 tail_sum1[1] = tail_t;
3195 }
3196 x_elem[0] = x_tail_i[xi];
3197 x_elem[1] = x_tail_i[xi + 1];
3198 {
3199 double cd[2];
3200 cd[0] = (double) a_elem[0];
3201 cd[1] = (double) a_elem[1];
3202 {
3203 /* Compute complex-extra = complex-double * complex-double. */
3204 double head_t1, tail_t1;
3205 double head_t2, tail_t2;
3206 /* Real part */
3207 {
3208 /* Compute double_double = double * double. */
3209 double a1, a2, b1, b2, con;
3210
3211 con = x_elem[0] * split;
3212 a1 = con - x_elem[0];
3213 a1 = con - a1;
3214 a2 = x_elem[0] - a1;
3215 con = cd[0] * split;
3216 b1 = con - cd[0];
3217 b1 = con - b1;
3218 b2 = cd[0] - b1;
3219
3220 head_t1 = x_elem[0] * cd[0];
3221 tail_t1 =
3222 (((a1 * b1 - head_t1) + a1 * b2) + a2 * b1) + a2 * b2;
3223 }
3224 {
3225 /* Compute double_double = double * double. */
3226 double a1, a2, b1, b2, con;
3227
3228 con = x_elem[1] * split;
3229 a1 = con - x_elem[1];
3230 a1 = con - a1;
3231 a2 = x_elem[1] - a1;
3232 con = cd[1] * split;
3233 b1 = con - cd[1];
3234 b1 = con - b1;
3235 b2 = cd[1] - b1;
3236
3237 head_t2 = x_elem[1] * cd[1];
3238 tail_t2 =
3239 (((a1 * b1 - head_t2) + a1 * b2) + a2 * b1) + a2 * b2;
3240 }
3241 head_t2 = -head_t2;
3242 tail_t2 = -tail_t2;
3243 {
3244 /* Compute double-double = double-double + double-double. */
3245 double bv;
3246 double s1, s2, t1, t2;
3247
3248 /* Add two hi words. */
3249 s1 = head_t1 + head_t2;
3250 bv = s1 - head_t1;
3251 s2 = ((head_t2 - bv) + (head_t1 - (s1 - bv)));
3252
3253 /* Add two lo words. */
3254 t1 = tail_t1 + tail_t2;
3255 bv = t1 - tail_t1;
3256 t2 = ((tail_t2 - bv) + (tail_t1 - (t1 - bv)));
3257
3258 s2 += t1;
3259
3260 /* Renormalize (s1, s2) to (t1, s2) */
3261 t1 = s1 + s2;
3262 s2 = s2 - (t1 - s1);
3263
3264 t2 += s2;
3265
3266 /* Renormalize (t1, t2) */
3267 head_t1 = t1 + t2;
3268 tail_t1 = t2 - (head_t1 - t1);
3269 }
3270 head_prod2[0] = head_t1;
3271 tail_prod2[0] = tail_t1;
3272 /* Imaginary part */
3273 {
3274 /* Compute double_double = double * double. */
3275 double a1, a2, b1, b2, con;
3276
3277 con = x_elem[1] * split;
3278 a1 = con - x_elem[1];
3279 a1 = con - a1;
3280 a2 = x_elem[1] - a1;
3281 con = cd[0] * split;
3282 b1 = con - cd[0];
3283 b1 = con - b1;
3284 b2 = cd[0] - b1;
3285
3286 head_t1 = x_elem[1] * cd[0];
3287 tail_t1 =
3288 (((a1 * b1 - head_t1) + a1 * b2) + a2 * b1) + a2 * b2;
3289 }
3290 {
3291 /* Compute double_double = double * double. */
3292 double a1, a2, b1, b2, con;
3293
3294 con = x_elem[0] * split;
3295 a1 = con - x_elem[0];
3296 a1 = con - a1;
3297 a2 = x_elem[0] - a1;
3298 con = cd[1] * split;
3299 b1 = con - cd[1];
3300 b1 = con - b1;
3301 b2 = cd[1] - b1;
3302
3303 head_t2 = x_elem[0] * cd[1];
3304 tail_t2 =
3305 (((a1 * b1 - head_t2) + a1 * b2) + a2 * b1) + a2 * b2;
3306 }
3307 {
3308 /* Compute double-double = double-double + double-double. */
3309 double bv;
3310 double s1, s2, t1, t2;
3311
3312 /* Add two hi words. */
3313 s1 = head_t1 + head_t2;
3314 bv = s1 - head_t1;
3315 s2 = ((head_t2 - bv) + (head_t1 - (s1 - bv)));
3316
3317 /* Add two lo words. */
3318 t1 = tail_t1 + tail_t2;
3319 bv = t1 - tail_t1;
3320 t2 = ((tail_t2 - bv) + (tail_t1 - (t1 - bv)));
3321
3322 s2 += t1;
3323
3324 /* Renormalize (s1, s2) to (t1, s2) */
3325 t1 = s1 + s2;
3326 s2 = s2 - (t1 - s1);
3327
3328 t2 += s2;
3329
3330 /* Renormalize (t1, t2) */
3331 head_t1 = t1 + t2;
3332 tail_t1 = t2 - (head_t1 - t1);
3333 }
3334 head_prod2[1] = head_t1;
3335 tail_prod2[1] = tail_t1;
3336 }
3337 }
3338 {
3339 double head_t, tail_t;
3340 double head_a, tail_a;
3341 double head_b, tail_b;
3342 /* Real part */
3343 head_a = head_sum2[0];
3344 tail_a = tail_sum2[0];
3345 head_b = head_prod2[0];
3346 tail_b = tail_prod2[0];
3347 {
3348 /* Compute double-double = double-double + double-double. */
3349 double bv;
3350 double s1, s2, t1, t2;
3351
3352 /* Add two hi words. */
3353 s1 = head_a + head_b;
3354 bv = s1 - head_a;
3355 s2 = ((head_b - bv) + (head_a - (s1 - bv)));
3356
3357 /* Add two lo words. */
3358 t1 = tail_a + tail_b;
3359 bv = t1 - tail_a;
3360 t2 = ((tail_b - bv) + (tail_a - (t1 - bv)));
3361
3362 s2 += t1;
3363
3364 /* Renormalize (s1, s2) to (t1, s2) */
3365 t1 = s1 + s2;
3366 s2 = s2 - (t1 - s1);
3367
3368 t2 += s2;
3369
3370 /* Renormalize (t1, t2) */
3371 head_t = t1 + t2;
3372 tail_t = t2 - (head_t - t1);
3373 }
3374 head_sum2[0] = head_t;
3375 tail_sum2[0] = tail_t;
3376 /* Imaginary part */
3377 head_a = head_sum2[1];
3378 tail_a = tail_sum2[1];
3379 head_b = head_prod2[1];
3380 tail_b = tail_prod2[1];
3381 {
3382 /* Compute double-double = double-double + double-double. */
3383 double bv;
3384 double s1, s2, t1, t2;
3385
3386 /* Add two hi words. */
3387 s1 = head_a + head_b;
3388 bv = s1 - head_a;
3389 s2 = ((head_b - bv) + (head_a - (s1 - bv)));
3390
3391 /* Add two lo words. */
3392 t1 = tail_a + tail_b;
3393 bv = t1 - tail_a;
3394 t2 = ((tail_b - bv) + (tail_a - (t1 - bv)));
3395
3396 s2 += t1;
3397
3398 /* Renormalize (s1, s2) to (t1, s2) */
3399 t1 = s1 + s2;
3400 s2 = s2 - (t1 - s1);
3401
3402 t2 += s2;
3403
3404 /* Renormalize (t1, t2) */
3405 head_t = t1 + t2;
3406 tail_t = t2 - (head_t - t1);
3407 }
3408 head_sum2[1] = head_t;
3409 tail_sum2[1] = tail_t;
3410 }
3411 }
3412 {
3413 double head_t, tail_t;
3414 double head_a, tail_a;
3415 double head_b, tail_b;
3416 /* Real part */
3417 head_a = head_sum1[0];
3418 tail_a = tail_sum1[0];
3419 head_b = head_sum2[0];
3420 tail_b = tail_sum2[0];
3421 {
3422 /* Compute double-double = double-double + double-double. */
3423 double bv;
3424 double s1, s2, t1, t2;
3425
3426 /* Add two hi words. */
3427 s1 = head_a + head_b;
3428 bv = s1 - head_a;
3429 s2 = ((head_b - bv) + (head_a - (s1 - bv)));
3430
3431 /* Add two lo words. */
3432 t1 = tail_a + tail_b;
3433 bv = t1 - tail_a;
3434 t2 = ((tail_b - bv) + (tail_a - (t1 - bv)));
3435
3436 s2 += t1;
3437
3438 /* Renormalize (s1, s2) to (t1, s2) */
3439 t1 = s1 + s2;
3440 s2 = s2 - (t1 - s1);
3441
3442 t2 += s2;
3443
3444 /* Renormalize (t1, t2) */
3445 head_t = t1 + t2;
3446 tail_t = t2 - (head_t - t1);
3447 }
3448 head_sum1[0] = head_t;
3449 tail_sum1[0] = tail_t;
3450 /* Imaginary part */
3451 head_a = head_sum1[1];
3452 tail_a = tail_sum1[1];
3453 head_b = head_sum2[1];
3454 tail_b = tail_sum2[1];
3455 {
3456 /* Compute double-double = double-double + double-double. */
3457 double bv;
3458 double s1, s2, t1, t2;
3459
3460 /* Add two hi words. */
3461 s1 = head_a + head_b;
3462 bv = s1 - head_a;
3463 s2 = ((head_b - bv) + (head_a - (s1 - bv)));
3464
3465 /* Add two lo words. */
3466 t1 = tail_a + tail_b;
3467 bv = t1 - tail_a;
3468 t2 = ((tail_b - bv) + (tail_a - (t1 - bv)));
3469
3470 s2 += t1;
3471
3472 /* Renormalize (s1, s2) to (t1, s2) */
3473 t1 = s1 + s2;
3474 s2 = s2 - (t1 - s1);
3475
3476 t2 += s2;
3477
3478 /* Renormalize (t1, t2) */
3479 head_t = t1 + t2;
3480 tail_t = t2 - (head_t - t1);
3481 }
3482 head_sum1[1] = head_t;
3483 tail_sum1[1] = tail_t;
3484 }
3485 {
3486 /* Compute complex-extra = complex-extra * complex-double. */
3487 double head_a0, tail_a0;
3488 double head_a1, tail_a1;
3489 double head_t1, tail_t1;
3490 double head_t2, tail_t2;
3491 head_a0 = head_sum1[0];
3492 tail_a0 = tail_sum1[0];
3493 head_a1 = head_sum1[1];
3494 tail_a1 = tail_sum1[1];
3495 /* real part */
3496 {
3497 /* Compute double-double = double-double * double. */
3498 double a11, a21, b1, b2, c11, c21, c2, con, t1, t2;
3499
3500 con = head_a0 * split;
3501 a11 = con - head_a0;
3502 a11 = con - a11;
3503 a21 = head_a0 - a11;
3504 con = alpha_i[0] * split;
3505 b1 = con - alpha_i[0];
3506 b1 = con - b1;
3507 b2 = alpha_i[0] - b1;
3508
3509 c11 = head_a0 * alpha_i[0];
3510 c21 = (((a11 * b1 - c11) + a11 * b2) + a21 * b1) + a21 * b2;
3511
3512 c2 = tail_a0 * alpha_i[0];
3513 t1 = c11 + c2;
3514 t2 = (c2 - (t1 - c11)) + c21;
3515
3516 head_t1 = t1 + t2;
3517 tail_t1 = t2 - (head_t1 - t1);
3518 }
3519 {
3520 /* Compute double-double = double-double * double. */
3521 double a11, a21, b1, b2, c11, c21, c2, con, t1, t2;
3522
3523 con = head_a1 * split;
3524 a11 = con - head_a1;
3525 a11 = con - a11;
3526 a21 = head_a1 - a11;
3527 con = alpha_i[1] * split;
3528 b1 = con - alpha_i[1];
3529 b1 = con - b1;
3530 b2 = alpha_i[1] - b1;
3531
3532 c11 = head_a1 * alpha_i[1];
3533 c21 = (((a11 * b1 - c11) + a11 * b2) + a21 * b1) + a21 * b2;
3534
3535 c2 = tail_a1 * alpha_i[1];
3536 t1 = c11 + c2;
3537 t2 = (c2 - (t1 - c11)) + c21;
3538
3539 head_t2 = t1 + t2;
3540 tail_t2 = t2 - (head_t2 - t1);
3541 }
3542 head_t2 = -head_t2;
3543 tail_t2 = -tail_t2;
3544 {
3545 /* Compute double-double = double-double + double-double. */
3546 double bv;
3547 double s1, s2, t1, t2;
3548
3549 /* Add two hi words. */
3550 s1 = head_t1 + head_t2;
3551 bv = s1 - head_t1;
3552 s2 = ((head_t2 - bv) + (head_t1 - (s1 - bv)));
3553
3554 /* Add two lo words. */
3555 t1 = tail_t1 + tail_t2;
3556 bv = t1 - tail_t1;
3557 t2 = ((tail_t2 - bv) + (tail_t1 - (t1 - bv)));
3558
3559 s2 += t1;
3560
3561 /* Renormalize (s1, s2) to (t1, s2) */
3562 t1 = s1 + s2;
3563 s2 = s2 - (t1 - s1);
3564
3565 t2 += s2;
3566
3567 /* Renormalize (t1, t2) */
3568 head_t1 = t1 + t2;
3569 tail_t1 = t2 - (head_t1 - t1);
3570 }
3571 head_tmp1[0] = head_t1;
3572 tail_tmp1[0] = tail_t1;
3573 /* imaginary part */
3574 {
3575 /* Compute double-double = double-double * double. */
3576 double a11, a21, b1, b2, c11, c21, c2, con, t1, t2;
3577
3578 con = head_a1 * split;
3579 a11 = con - head_a1;
3580 a11 = con - a11;
3581 a21 = head_a1 - a11;
3582 con = alpha_i[0] * split;
3583 b1 = con - alpha_i[0];
3584 b1 = con - b1;
3585 b2 = alpha_i[0] - b1;
3586
3587 c11 = head_a1 * alpha_i[0];
3588 c21 = (((a11 * b1 - c11) + a11 * b2) + a21 * b1) + a21 * b2;
3589
3590 c2 = tail_a1 * alpha_i[0];
3591 t1 = c11 + c2;
3592 t2 = (c2 - (t1 - c11)) + c21;
3593
3594 head_t1 = t1 + t2;
3595 tail_t1 = t2 - (head_t1 - t1);
3596 }
3597 {
3598 /* Compute double-double = double-double * double. */
3599 double a11, a21, b1, b2, c11, c21, c2, con, t1, t2;
3600
3601 con = head_a0 * split;
3602 a11 = con - head_a0;
3603 a11 = con - a11;
3604 a21 = head_a0 - a11;
3605 con = alpha_i[1] * split;
3606 b1 = con - alpha_i[1];
3607 b1 = con - b1;
3608 b2 = alpha_i[1] - b1;
3609
3610 c11 = head_a0 * alpha_i[1];
3611 c21 = (((a11 * b1 - c11) + a11 * b2) + a21 * b1) + a21 * b2;
3612
3613 c2 = tail_a0 * alpha_i[1];
3614 t1 = c11 + c2;
3615 t2 = (c2 - (t1 - c11)) + c21;
3616
3617 head_t2 = t1 + t2;
3618 tail_t2 = t2 - (head_t2 - t1);
3619 }
3620 {
3621 /* Compute double-double = double-double + double-double. */
3622 double bv;
3623 double s1, s2, t1, t2;
3624
3625 /* Add two hi words. */
3626 s1 = head_t1 + head_t2;
3627 bv = s1 - head_t1;
3628 s2 = ((head_t2 - bv) + (head_t1 - (s1 - bv)));
3629
3630 /* Add two lo words. */
3631 t1 = tail_t1 + tail_t2;
3632 bv = t1 - tail_t1;
3633 t2 = ((tail_t2 - bv) + (tail_t1 - (t1 - bv)));
3634
3635 s2 += t1;
3636
3637 /* Renormalize (s1, s2) to (t1, s2) */
3638 t1 = s1 + s2;
3639 s2 = s2 - (t1 - s1);
3640
3641 t2 += s2;
3642
3643 /* Renormalize (t1, t2) */
3644 head_t1 = t1 + t2;
3645 tail_t1 = t2 - (head_t1 - t1);
3646 }
3647 head_tmp1[1] = head_t1;
3648 tail_tmp1[1] = tail_t1;
3649 }
3650
3651 y_elem[0] = y_i[yi];
3652 y_elem[1] = y_i[yi + 1];
3653 {
3654 /* Compute complex-extra = complex-double * complex-double. */
3655 double head_t1, tail_t1;
3656 double head_t2, tail_t2;
3657 /* Real part */
3658 {
3659 /* Compute double_double = double * double. */
3660 double a1, a2, b1, b2, con;
3661
3662 con = y_elem[0] * split;
3663 a1 = con - y_elem[0];
3664 a1 = con - a1;
3665 a2 = y_elem[0] - a1;
3666 con = beta_i[0] * split;
3667 b1 = con - beta_i[0];
3668 b1 = con - b1;
3669 b2 = beta_i[0] - b1;
3670
3671 head_t1 = y_elem[0] * beta_i[0];
3672 tail_t1 = (((a1 * b1 - head_t1) + a1 * b2) + a2 * b1) + a2 * b2;
3673 }
3674 {
3675 /* Compute double_double = double * double. */
3676 double a1, a2, b1, b2, con;
3677
3678 con = y_elem[1] * split;
3679 a1 = con - y_elem[1];
3680 a1 = con - a1;
3681 a2 = y_elem[1] - a1;
3682 con = beta_i[1] * split;
3683 b1 = con - beta_i[1];
3684 b1 = con - b1;
3685 b2 = beta_i[1] - b1;
3686
3687 head_t2 = y_elem[1] * beta_i[1];
3688 tail_t2 = (((a1 * b1 - head_t2) + a1 * b2) + a2 * b1) + a2 * b2;
3689 }
3690 head_t2 = -head_t2;
3691 tail_t2 = -tail_t2;
3692 {
3693 /* Compute double-double = double-double + double-double. */
3694 double bv;
3695 double s1, s2, t1, t2;
3696
3697 /* Add two hi words. */
3698 s1 = head_t1 + head_t2;
3699 bv = s1 - head_t1;
3700 s2 = ((head_t2 - bv) + (head_t1 - (s1 - bv)));
3701
3702 /* Add two lo words. */
3703 t1 = tail_t1 + tail_t2;
3704 bv = t1 - tail_t1;
3705 t2 = ((tail_t2 - bv) + (tail_t1 - (t1 - bv)));
3706
3707 s2 += t1;
3708
3709 /* Renormalize (s1, s2) to (t1, s2) */
3710 t1 = s1 + s2;
3711 s2 = s2 - (t1 - s1);
3712
3713 t2 += s2;
3714
3715 /* Renormalize (t1, t2) */
3716 head_t1 = t1 + t2;
3717 tail_t1 = t2 - (head_t1 - t1);
3718 }
3719 head_tmp2[0] = head_t1;
3720 tail_tmp2[0] = tail_t1;
3721 /* Imaginary part */
3722 {
3723 /* Compute double_double = double * double. */
3724 double a1, a2, b1, b2, con;
3725
3726 con = y_elem[1] * split;
3727 a1 = con - y_elem[1];
3728 a1 = con - a1;
3729 a2 = y_elem[1] - a1;
3730 con = beta_i[0] * split;
3731 b1 = con - beta_i[0];
3732 b1 = con - b1;
3733 b2 = beta_i[0] - b1;
3734
3735 head_t1 = y_elem[1] * beta_i[0];
3736 tail_t1 = (((a1 * b1 - head_t1) + a1 * b2) + a2 * b1) + a2 * b2;
3737 }
3738 {
3739 /* Compute double_double = double * double. */
3740 double a1, a2, b1, b2, con;
3741
3742 con = y_elem[0] * split;
3743 a1 = con - y_elem[0];
3744 a1 = con - a1;
3745 a2 = y_elem[0] - a1;
3746 con = beta_i[1] * split;
3747 b1 = con - beta_i[1];
3748 b1 = con - b1;
3749 b2 = beta_i[1] - b1;
3750
3751 head_t2 = y_elem[0] * beta_i[1];
3752 tail_t2 = (((a1 * b1 - head_t2) + a1 * b2) + a2 * b1) + a2 * b2;
3753 }
3754 {
3755 /* Compute double-double = double-double + double-double. */
3756 double bv;
3757 double s1, s2, t1, t2;
3758
3759 /* Add two hi words. */
3760 s1 = head_t1 + head_t2;
3761 bv = s1 - head_t1;
3762 s2 = ((head_t2 - bv) + (head_t1 - (s1 - bv)));
3763
3764 /* Add two lo words. */
3765 t1 = tail_t1 + tail_t2;
3766 bv = t1 - tail_t1;
3767 t2 = ((tail_t2 - bv) + (tail_t1 - (t1 - bv)));
3768
3769 s2 += t1;
3770
3771 /* Renormalize (s1, s2) to (t1, s2) */
3772 t1 = s1 + s2;
3773 s2 = s2 - (t1 - s1);
3774
3775 t2 += s2;
3776
3777 /* Renormalize (t1, t2) */
3778 head_t1 = t1 + t2;
3779 tail_t1 = t2 - (head_t1 - t1);
3780 }
3781 head_tmp2[1] = head_t1;
3782 tail_tmp2[1] = tail_t1;
3783 }
3784 {
3785 double head_t, tail_t;
3786 double head_a, tail_a;
3787 double head_b, tail_b;
3788 /* Real part */
3789 head_a = head_tmp1[0];
3790 tail_a = tail_tmp1[0];
3791 head_b = head_tmp2[0];
3792 tail_b = tail_tmp2[0];
3793 {
3794 /* Compute double-double = double-double + double-double. */
3795 double bv;
3796 double s1, s2, t1, t2;
3797
3798 /* Add two hi words. */
3799 s1 = head_a + head_b;
3800 bv = s1 - head_a;
3801 s2 = ((head_b - bv) + (head_a - (s1 - bv)));
3802
3803 /* Add two lo words. */
3804 t1 = tail_a + tail_b;
3805 bv = t1 - tail_a;
3806 t2 = ((tail_b - bv) + (tail_a - (t1 - bv)));
3807
3808 s2 += t1;
3809
3810 /* Renormalize (s1, s2) to (t1, s2) */
3811 t1 = s1 + s2;
3812 s2 = s2 - (t1 - s1);
3813
3814 t2 += s2;
3815
3816 /* Renormalize (t1, t2) */
3817 head_t = t1 + t2;
3818 tail_t = t2 - (head_t - t1);
3819 }
3820 head_tmp3[0] = head_t;
3821 tail_tmp3[0] = tail_t;
3822 /* Imaginary part */
3823 head_a = head_tmp1[1];
3824 tail_a = tail_tmp1[1];
3825 head_b = head_tmp2[1];
3826 tail_b = tail_tmp2[1];
3827 {
3828 /* Compute double-double = double-double + double-double. */
3829 double bv;
3830 double s1, s2, t1, t2;
3831
3832 /* Add two hi words. */
3833 s1 = head_a + head_b;
3834 bv = s1 - head_a;
3835 s2 = ((head_b - bv) + (head_a - (s1 - bv)));
3836
3837 /* Add two lo words. */
3838 t1 = tail_a + tail_b;
3839 bv = t1 - tail_a;
3840 t2 = ((tail_b - bv) + (tail_a - (t1 - bv)));
3841
3842 s2 += t1;
3843
3844 /* Renormalize (s1, s2) to (t1, s2) */
3845 t1 = s1 + s2;
3846 s2 = s2 - (t1 - s1);
3847
3848 t2 += s2;
3849
3850 /* Renormalize (t1, t2) */
3851 head_t = t1 + t2;
3852 tail_t = t2 - (head_t - t1);
3853 }
3854 head_tmp3[1] = head_t;
3855 tail_tmp3[1] = tail_t;
3856 }
3857 y_i[yi] = head_tmp3[0];
3858 y_i[yi + 1] = head_tmp3[1];
3859 }
3860 }
3861
3862 FPU_FIX_STOP;
3863
3864 break;
3865 }
3866 }
3867 } /* end BLAS_zhemv2_c_z_x */
3868