1 /*********************************************************************/
2 /*                                                                   */
3 /*             Optimized BLAS libraries                              */
4 /*                     By Kazushige Goto <kgoto@tacc.utexas.edu>     */
5 /*                                                                   */
6 /* Copyright (c) The University of Texas, 2009. All rights reserved. */
7 /* UNIVERSITY EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES CONCERNING  */
8 /* THIS SOFTWARE AND DOCUMENTATION, INCLUDING ANY WARRANTIES OF      */
9 /* MERCHANTABILITY, FITNESS FOR ANY PARTICULAR PURPOSE,              */
10 /* NON-INFRINGEMENT AND WARRANTIES OF PERFORMANCE, AND ANY WARRANTY  */
11 /* THAT MIGHT OTHERWISE ARISE FROM COURSE OF DEALING OR USAGE OF     */
12 /* TRADE. NO WARRANTY IS EITHER EXPRESS OR IMPLIED WITH RESPECT TO   */
13 /* THE USE OF THE SOFTWARE OR DOCUMENTATION.                         */
14 /* Under no circumstances shall University be liable for incidental, */
15 /* special, indirect, direct or consequential damages or loss of     */
16 /* profits, interruption of business, or related expenses which may  */
17 /* arise from use of Software or Documentation, including but not    */
18 /* limited to those resulting from defects in Software and/or        */
19 /* Documentation, or loss or inaccuracy of data of any kind.         */
20 /*********************************************************************/
21 
22 #include <stdio.h>
23 #include "common.h"
24 #ifdef FUNCTION_PROFILE
25 #include "functable.h"
26 #endif
27 
28 #undef MAX_K
29 
30 #ifdef USE_ABS
31 
32 #ifndef USE_MIN
33 
34 /* ABS & MAX */
35 #ifndef COMPLEX
36 #ifdef XDOUBLE
37 #define MAX_K	IQAMAX_K
38 #elif defined(DOUBLE)
39 #define MAX_K	IDAMAX_K
40 #else
41 #define MAX_K	ISAMAX_K
42 #endif
43 #else
44 #ifdef XDOUBLE
45 #define MAX_K	IXAMAX_K
46 #elif defined(DOUBLE)
47 #define MAX_K	IZAMAX_K
48 #else
49 #define MAX_K	ICAMAX_K
50 #endif
51 #endif
52 
53 #else
54 
55 /* ABS & MIN */
56 #ifndef COMPLEX
57 #ifdef XDOUBLE
58 #define MAX_K	IQAMIN_K
59 #elif defined(DOUBLE)
60 #define MAX_K	IDAMIN_K
61 #else
62 #define MAX_K	ISAMIN_K
63 #endif
64 #else
65 #ifdef XDOUBLE
66 #define MAX_K	IXAMIN_K
67 #elif defined(DOUBLE)
68 #define MAX_K	IZAMIN_K
69 #else
70 #define MAX_K	ICAMIN_K
71 #endif
72 #endif
73 
74 #endif
75 
76 #else
77 
78 #ifndef USE_MIN
79 
80 /* MAX */
81 #ifdef XDOUBLE
82 #define MAX_K	IQMAX_K
83 #elif defined(DOUBLE)
84 #define MAX_K	IDMAX_K
85 #else
86 #define MAX_K	ISMAX_K
87 #endif
88 
89 #else
90 
91 /* MIN */
92 #ifdef XDOUBLE
93 #define MAX_K	IQMIN_K
94 #elif defined(DOUBLE)
95 #define MAX_K	IDMIN_K
96 #else
97 #define MAX_K	ISMIN_K
98 #endif
99 
100 #endif
101 
102 #endif
103 
104 #ifndef CBLAS
105 
NAME(blasint * N,FLOAT * x,blasint * INCX)106 blasint NAME(blasint *N, FLOAT *x, blasint *INCX){
107 
108   BLASLONG n    = *N;
109   BLASLONG incx = *INCX;
110   blasint ret;
111 
112   PRINT_DEBUG_NAME;
113 
114   if (n <= 0) return 0;
115 
116   IDEBUG_START;
117 
118   FUNCTION_PROFILE_START();
119 
120   ret = (blasint)MAX_K(n, x, incx);
121 
122   FUNCTION_PROFILE_END(COMPSIZE, n, 0);
123 
124   IDEBUG_END;
125 
126   return ret;
127 }
128 
129 #else
130 
CNAME(blasint n,FLOAT * x,blasint incx)131 CBLAS_INDEX CNAME(blasint n, FLOAT *x, blasint incx){
132 
133   CBLAS_INDEX ret;
134 
135   PRINT_DEBUG_CNAME;
136 
137   if (n <= 0) return 0;
138 
139   IDEBUG_START;
140 
141   FUNCTION_PROFILE_START();
142 
143   ret = MAX_K(n, x, incx);
144 
145   if (ret) ret --;
146 
147   FUNCTION_PROFILE_END(COMPSIZE, n, 0);
148 
149   IDEBUG_END;
150 
151   return ret;
152 }
153 
154 #endif
155