1
/* ---------------------------------------------------------------------
3
* -- Automatically Tuned Linear Algebra Software (ATLAS)
4
* (C) Copyright 2000 All Rights Reserved
6
* -- ATLAS routine -- Version 3.0 -- April 1, 2000
8
* -- Suggestions, comments, bugs reports should be sent to the follo-
9
* wing e-mail address: atlas@cs.utk.edu
11
* Author : Antoine P. Petitet
12
* Contributor(s) : R. Clint Whaley
13
* University of Tennessee - Innovative Computing Laboratory
14
* Knoxville TN, 37996-1301, USA.
16
* ---------------------------------------------------------------------
18
* -- Copyright notice and Licensing terms:
20
* Redistribution and use in source and binary forms, with or without
21
* modification, are permitted provided that the following conditions
24
* 1. Redistributions of source code must retain the above copyright
25
* notice, this list of conditions and the following disclaimer.
26
* 2. Redistributions in binary form must reproduce the above copyright
27
* notice, this list of conditions, and the following disclaimer in
28
* the documentation and/or other materials provided with the distri-
30
* 3. The name of the University, the ATLAS group, or the names of its
31
* contributors may not be used to endorse or promote products deri-
32
* ved from this software without specific written permission.
36
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
37
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
38
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
39
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY
40
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE-
41
* CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
42
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
43
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEO-
44
* RY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (IN-
45
* CLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
46
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
48
* ---------------------------------------------------------------------
53
#include "atlas_misc.h"
54
#include "atlas_level1.h"
55
#include "atlas_kernel2.h"
56
#include "atlas_lvl2.h"
60
#include "atlas_reflvl2.h" /* temporary for building purposes */
61
#include "atlas_reflevel2.h" /* used for gbmv, gpmv and gpr. */
64
void Mjoin( PATL, gpmv )
66
const enum ATLAS_UPLO UPLO,
67
const enum ATLAS_TRANS TRANS,
81
* .. Local Variables ..
84
* .. Executable Statements ..
87
if( ( M == 0 ) || ( N == 0 ) ||
88
( ( SCALAR_IS_ZERO( ALPHA ) ) && ( SCALAR_IS_ONE( BETA ) ) ) ) return;
90
if( SCALAR_IS_ZERO( ALPHA ) )
92
if( !( SCALAR_IS_ONE( BETA ) ) ) Mjoin( PATL, scal )( M, BETA, Y, INCY );
96
Mjoin( PATL, refgpmv )( UPLO, TRANS, M, N, ALPHA, A, LDA, X, INCX, BETA,
99
* End of Mjoin( PATL, gpmv )
104
void Mjoin( PATL, gpmvLN_a1_x1_b0_y1 )
120
#define zero ATL_rzero
122
const TYPE one [2] = { ATL_rone, ATL_rzero },
123
zero[2] = { ATL_rzero, ATL_rzero };
125
Mjoin( PATL, gpmv )( AtlasLower, AtlasNoTrans, M, N, one, A, LDA,
130
void Mjoin( PATL, gpmvLT_a1_x1_b0_y1 )
146
#define zero ATL_rzero
148
const TYPE one [2] = { ATL_rone, ATL_rzero },
149
zero[2] = { ATL_rzero, ATL_rzero };
151
Mjoin( PATL, gpmv )( AtlasLower, AtlasTrans, M, N, one, A, LDA, X, 1,
156
void Mjoin( PATL, gpmvLC_a1_x1_b0_y1 )
172
#define zero ATL_rzero
174
const TYPE one [2] = { ATL_rone, ATL_rzero },
175
zero[2] = { ATL_rzero, ATL_rzero };
177
Mjoin( PATL, gpmv )( AtlasLower, AtlasConjTrans, M, N, one, A, LDA, X, 1,
181
void Mjoin( PATL, gpmvLNc_a1_x1_b0_y1 )
197
#define zero ATL_rzero
199
const TYPE one [2] = { ATL_rone, ATL_rzero },
200
zero[2] = { ATL_rzero, ATL_rzero };
202
Mjoin( PATL, gpmv )( AtlasLower, AtlasConj, M, N, one, A, LDA, X, 1,
210
void Mjoin( PATL, gpmvLN_a1_x1_bXi0_y1 )
224
const TYPE one[2] = { ATL_rone, ATL_rzero };
227
beta[0] = *BETA; beta[1] = ATL_rzero;
228
Mjoin( PATL, gpmv )( AtlasLower, AtlasNoTrans, M, N, one, A, LDA, X, 1,
233
void Mjoin( PATL, gpmvLT_a1_x1_bXi0_y1 )
247
const TYPE one[2] = { ATL_rone, ATL_rzero };
250
beta[0] = *BETA; beta[1] = ATL_rzero;
251
Mjoin( PATL, gpmv )( AtlasLower, AtlasTrans, M, N, one, A, LDA, X, 1,
255
void Mjoin( PATL, gpmvLC_a1_x1_bXi0_y1 )
269
const TYPE one [2] = { ATL_rone, ATL_rzero };
272
beta[0] = *BETA; beta[1] = ATL_rzero;
273
Mjoin( PATL, gpmv )( AtlasLower, AtlasConjTrans, M, N, one, A, LDA, X, 1,
277
void Mjoin( PATL, gpmvLNc_a1_x1_bXi0_y1 )
291
const TYPE one [2] = { ATL_rone, ATL_rzero };
294
beta[0] = *BETA; beta[1] = ATL_rzero;
295
Mjoin( PATL, gpmv )( AtlasLower, AtlasConj, M, N, one, A, LDA, X, 1,
302
void Mjoin( PATL, gpmvLN_a1_x1_b1_y1 )
319
const TYPE one[2] = { ATL_rone, ATL_rzero };
321
Mjoin( PATL, gpmv )( AtlasLower, AtlasNoTrans, M, N, one, A, LDA, X, 1,
326
void Mjoin( PATL, gpmvLT_a1_x1_b1_y1 )
343
const TYPE one[2] = { ATL_rone, ATL_rzero };
345
Mjoin( PATL, gpmv )( AtlasLower, AtlasTrans, M, N, one, A, LDA, X, 1,
350
void Mjoin( PATL, gpmvLC_a1_x1_b1_y1 )
367
const TYPE one[2] = { ATL_rone, ATL_rzero };
369
Mjoin( PATL, gpmv )( AtlasLower, AtlasConjTrans, M, N, one, A, LDA, X, 1,
373
void Mjoin( PATL, gpmvLNc_a1_x1_b1_y1 )
390
const TYPE one[2] = { ATL_rone, ATL_rzero };
392
Mjoin( PATL, gpmv )( AtlasLower, AtlasConj, M, N, one, A, LDA, X, 1,
399
void Mjoin( PATL, gpmvLN_a1_x1_bX_y1 )
416
const TYPE one[2] = { ATL_rone, ATL_rzero };
418
Mjoin( PATL, gpmv )( AtlasLower, AtlasNoTrans, M, N, one, A, LDA, X, 1,
423
void Mjoin( PATL, gpmvLT_a1_x1_bX_y1 )
440
const TYPE one[2] = { ATL_rone, ATL_rzero };
442
Mjoin( PATL, gpmv )( AtlasLower, AtlasTrans, M, N, one, A, LDA, X, 1,
448
void Mjoin( PATL, gpmvLC_a1_x1_bX_y1 )
462
const TYPE one[2] = { ATL_rone, ATL_rzero };
464
Mjoin( PATL, gpmv )( AtlasLower, AtlasConjTrans, M, N, one, A, LDA, X, 1,
468
void Mjoin( PATL, gpmvLNc_a1_x1_bX_y1 )
482
const TYPE one[2] = { ATL_rone, ATL_rzero };
484
Mjoin( PATL, gpmv )( AtlasLower, AtlasConj, M, N, one, A, LDA, X, 1,
491
void Mjoin( PATL, gpmvUN_a1_x1_b0_y1 )
507
#define zero ATL_rzero
509
const TYPE one [2] = { ATL_rone, ATL_rzero },
510
zero[2] = { ATL_rzero, ATL_rzero };
512
Mjoin( PATL, gpmv )( AtlasUpper, AtlasNoTrans, M, N, one, A, LDA,
517
void Mjoin( PATL, gpmvUT_a1_x1_b0_y1 )
533
#define zero ATL_rzero
535
const TYPE one [2] = { ATL_rone, ATL_rzero },
536
zero[2] = { ATL_rzero, ATL_rzero };
538
Mjoin( PATL, gpmv )( AtlasUpper, AtlasTrans, M, N, one, A, LDA, X, 1,
543
void Mjoin( PATL, gpmvUC_a1_x1_b0_y1 )
559
#define zero ATL_rzero
561
const TYPE one [2] = { ATL_rone, ATL_rzero },
562
zero[2] = { ATL_rzero, ATL_rzero };
564
Mjoin( PATL, gpmv )( AtlasUpper, AtlasConjTrans, M, N, one, A, LDA, X, 1,
568
void Mjoin( PATL, gpmvUNc_a1_x1_b0_y1 )
584
#define zero ATL_rzero
586
const TYPE one [2] = { ATL_rone, ATL_rzero },
587
zero[2] = { ATL_rzero, ATL_rzero };
589
Mjoin( PATL, gpmv )( AtlasUpper, AtlasConj, M, N, one, A, LDA, X, 1,
597
void Mjoin( PATL, gpmvUN_a1_x1_bXi0_y1 )
611
const TYPE one[2] = { ATL_rone, ATL_rzero };
614
beta[0] = *BETA; beta[1] = ATL_rzero;
615
Mjoin( PATL, gpmv )( AtlasUpper, AtlasNoTrans, M, N, one, A, LDA, X, 1,
620
void Mjoin( PATL, gpmvUT_a1_x1_bXi0_y1 )
634
const TYPE one[2] = { ATL_rone, ATL_rzero };
637
beta[0] = *BETA; beta[1] = ATL_rzero;
638
Mjoin( PATL, gpmv )( AtlasUpper, AtlasTrans, M, N, one, A, LDA, X, 1,
642
void Mjoin( PATL, gpmvUC_a1_x1_bXi0_y1 )
656
const TYPE one [2] = { ATL_rone, ATL_rzero };
659
beta[0] = *BETA; beta[1] = ATL_rzero;
660
Mjoin( PATL, gpmv )( AtlasUpper, AtlasConjTrans, M, N, one, A, LDA, X, 1,
664
void Mjoin( PATL, gpmvUNc_a1_x1_bXi0_y1 )
678
const TYPE one [2] = { ATL_rone, ATL_rzero };
681
beta[0] = *BETA; beta[1] = ATL_rzero;
682
Mjoin( PATL, gpmv )( AtlasUpper, AtlasConj, M, N, one, A, LDA, X, 1,
689
void Mjoin( PATL, gpmvUN_a1_x1_b1_y1 )
706
const TYPE one[2] = { ATL_rone, ATL_rzero };
708
Mjoin( PATL, gpmv )( AtlasUpper, AtlasNoTrans, M, N, one, A, LDA, X, 1,
713
void Mjoin( PATL, gpmvUT_a1_x1_b1_y1 )
730
const TYPE one[2] = { ATL_rone, ATL_rzero };
732
Mjoin( PATL, gpmv )( AtlasUpper, AtlasTrans, M, N, one, A, LDA, X, 1,
737
void Mjoin( PATL, gpmvUC_a1_x1_b1_y1 )
754
const TYPE one[2] = { ATL_rone, ATL_rzero };
756
Mjoin( PATL, gpmv )( AtlasUpper, AtlasConjTrans, M, N, one, A, LDA, X, 1,
760
void Mjoin( PATL, gpmvUNc_a1_x1_b1_y1 )
777
const TYPE one[2] = { ATL_rone, ATL_rzero };
779
Mjoin( PATL, gpmv )( AtlasUpper, AtlasConj, M, N, one, A, LDA, X, 1,
786
void Mjoin( PATL, gpmvUN_a1_x1_bX_y1 )
803
const TYPE one[2] = { ATL_rone, ATL_rzero };
805
Mjoin( PATL, gpmv )( AtlasUpper, AtlasNoTrans, M, N, one, A, LDA, X, 1,
810
void Mjoin( PATL, gpmvUT_a1_x1_bX_y1 )
827
const TYPE one[2] = { ATL_rone, ATL_rzero };
829
Mjoin( PATL, gpmv )( AtlasUpper, AtlasTrans, M, N, one, A, LDA, X, 1,
835
void Mjoin( PATL, gpmvUC_a1_x1_bX_y1 )
849
const TYPE one[2] = { ATL_rone, ATL_rzero };
851
Mjoin( PATL, gpmv )( AtlasUpper, AtlasConjTrans, M, N, one, A, LDA, X, 1,
855
void Mjoin( PATL, gpmvUNc_a1_x1_bX_y1 )
869
const TYPE one[2] = { ATL_rone, ATL_rzero };
871
Mjoin( PATL, gpmv )( AtlasUpper, AtlasConj, M, N, one, A, LDA, X, 1,