1 /*********************************************************************/
2 /* Copyright 2009, 2010 The University of Texas at Austin.           */
3 /* All rights reserved.                                              */
4 /*                                                                   */
5 /* Redistribution and use in source and binary forms, with or        */
6 /* without modification, are permitted provided that the following   */
7 /* conditions are met:                                               */
8 /*                                                                   */
9 /*   1. Redistributions of source code must retain the above         */
10 /*      copyright notice, this list of conditions and the following  */
11 /*      disclaimer.                                                  */
12 /*                                                                   */
13 /*   2. Redistributions in binary form must reproduce the above      */
14 /*      copyright notice, this list of conditions and the following  */
15 /*      disclaimer in the documentation and/or other materials       */
16 /*      provided with the distribution.                              */
17 /*                                                                   */
18 /*    THIS  SOFTWARE IS PROVIDED  BY THE  UNIVERSITY OF  TEXAS AT    */
19 /*    AUSTIN  ``AS IS''  AND ANY  EXPRESS OR  IMPLIED WARRANTIES,    */
20 /*    INCLUDING, BUT  NOT LIMITED  TO, THE IMPLIED  WARRANTIES OF    */
21 /*    MERCHANTABILITY  AND FITNESS FOR  A PARTICULAR  PURPOSE ARE    */
22 /*    DISCLAIMED.  IN  NO EVENT SHALL THE UNIVERSITY  OF TEXAS AT    */
23 /*    AUSTIN OR CONTRIBUTORS BE  LIABLE FOR ANY DIRECT, INDIRECT,    */
24 /*    INCIDENTAL,  SPECIAL, EXEMPLARY,  OR  CONSEQUENTIAL DAMAGES    */
25 /*    (INCLUDING, BUT  NOT LIMITED TO,  PROCUREMENT OF SUBSTITUTE    */
26 /*    GOODS  OR  SERVICES; LOSS  OF  USE,  DATA,  OR PROFITS;  OR    */
27 /*    BUSINESS INTERRUPTION) HOWEVER CAUSED  AND ON ANY THEORY OF    */
28 /*    LIABILITY, WHETHER  IN CONTRACT, STRICT  LIABILITY, OR TORT    */
29 /*    (INCLUDING NEGLIGENCE OR OTHERWISE)  ARISING IN ANY WAY OUT    */
30 /*    OF  THE  USE OF  THIS  SOFTWARE,  EVEN  IF ADVISED  OF  THE    */
31 /*    POSSIBILITY OF SUCH DAMAGE.                                    */
32 /*                                                                   */
33 /* The views and conclusions contained in the software and           */
34 /* documentation are those of the authors and should not be          */
35 /* interpreted as representing official policies, either expressed   */
36 /* or implied, of The University of Texas at Austin.                 */
37 /*********************************************************************/
38 
39 #include <stdio.h>
40 #include "common.h"
41 #ifdef FUNCTION_PROFILE
42 #include "functable.h"
43 #endif
44 
45 #undef MAX_K
46 
47 #ifdef USE_ABS
48 
49 #ifndef USE_MIN
50 
51 /* ABS & MAX */
52 #ifndef COMPLEX
53 #ifdef XDOUBLE
54 #define MAX_K	IQAMAX_K
55 #elif defined(DOUBLE)
56 #define MAX_K	IDAMAX_K
57 #else
58 #define MAX_K	ISAMAX_K
59 #endif
60 #else
61 #ifdef XDOUBLE
62 #define MAX_K	IXAMAX_K
63 #elif defined(DOUBLE)
64 #define MAX_K	IZAMAX_K
65 #else
66 #define MAX_K	ICAMAX_K
67 #endif
68 #endif
69 
70 #else
71 
72 /* ABS & MIN */
73 #ifndef COMPLEX
74 #ifdef XDOUBLE
75 #define MAX_K	IQAMIN_K
76 #elif defined(DOUBLE)
77 #define MAX_K	IDAMIN_K
78 #else
79 #define MAX_K	ISAMIN_K
80 #endif
81 #else
82 #ifdef XDOUBLE
83 #define MAX_K	IXAMIN_K
84 #elif defined(DOUBLE)
85 #define MAX_K	IZAMIN_K
86 #else
87 #define MAX_K	ICAMIN_K
88 #endif
89 #endif
90 
91 #endif
92 
93 #else
94 
95 #ifndef USE_MIN
96 
97 /* MAX */
98 #ifdef XDOUBLE
99 #define MAX_K	IQMAX_K
100 #elif defined(DOUBLE)
101 #define MAX_K	IDMAX_K
102 #else
103 #define MAX_K	ISMAX_K
104 #endif
105 
106 #else
107 
108 /* MIN */
109 #ifdef XDOUBLE
110 #define MAX_K	IQMIN_K
111 #elif defined(DOUBLE)
112 #define MAX_K	IDMIN_K
113 #else
114 #define MAX_K	ISMIN_K
115 #endif
116 
117 #endif
118 
119 #endif
120 
121 #ifndef CBLAS
122 
NAME(blasint * N,FLOAT * x,blasint * INCX)123 blasint NAME(blasint *N, FLOAT *x, blasint *INCX){
124 
125   BLASLONG n    = *N;
126   BLASLONG incx = *INCX;
127   blasint ret;
128 
129   PRINT_DEBUG_NAME;
130 
131   if (n <= 0) return 0;
132 
133   IDEBUG_START;
134 
135   FUNCTION_PROFILE_START();
136 
137   ret = (blasint)MAX_K(n, x, incx);
138 
139   if(ret > n) ret=n;
140 
141   FUNCTION_PROFILE_END(COMPSIZE, n, 0);
142 
143   IDEBUG_END;
144 
145   return ret;
146 }
147 
148 #else
149 #ifdef COMPLEX
CNAME(blasint n,void * vx,blasint incx)150 CBLAS_INDEX CNAME(blasint n, void *vx, blasint incx){
151   FLOAT *x = (FLOAT*) vx;
152 #else
153 CBLAS_INDEX CNAME(blasint n, FLOAT *x, blasint incx){
154 #endif
155 
156   CBLAS_INDEX ret;
157 
158   PRINT_DEBUG_CNAME;
159 
160   if (n <= 0) return 0;
161 
162   IDEBUG_START;
163 
164   FUNCTION_PROFILE_START();
165 
166   ret = MAX_K(n, x, incx);
167 
168   if (ret > n) ret=n;
169 
170   if (ret) ret --;
171 
172   FUNCTION_PROFILE_END(COMPSIZE, n, 0);
173 
174   IDEBUG_END;
175 
176   return ret;
177 }
178 
179 #endif
180