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 #ifndef CBLAS
29
NAME(blasint * N,FLOAT * ALPHA,FLOAT * x,blasint * INCX)30 void NAME(blasint *N, FLOAT *ALPHA, FLOAT *x, blasint *INCX){
31
32 blasint n = *N;
33 blasint incx = *INCX;
34
35 #ifndef SSCAL
36 FLOAT *alpha=ALPHA;
37 #else
38 FLOAT alpha[2] = {ALPHA[0], ZERO};
39 #endif
40
41 #else
42
43 #ifndef SSCAL
44 void CNAME(blasint n, FLOAT *ALPHA, FLOAT *x, blasint incx){
45
46 FLOAT *alpha=ALPHA;
47 #else
48 void CNAME(blasint n, FLOAT alpha_r, FLOAT *x, blasint incx){
49
50 FLOAT alpha[2] = {alpha_r, ZERO};
51 #endif
52 #endif
53
54 #ifdef SMP
55 int mode;
56 int nthreads;
57 #endif
58
59 #ifndef CBLAS
60 PRINT_DEBUG_NAME;
61 #else
62 PRINT_DEBUG_CNAME;
63 #endif
64
65 if (incx <= 0 || n <= 0) return;
66
67 if ((alpha[0] == ONE) && (alpha[1] == ZERO)) return;
68
69 IDEBUG_START;
70
71 FUNCTION_PROFILE_START();
72
73 #ifdef SMP
74 nthreads = num_cpu_avail(1);
75
76 if (nthreads == 1) {
77 #endif
78
79 SCAL_K(n, 0, 0, alpha[0], alpha[1], x, incx, NULL, 0, NULL, 0);
80
81 #ifdef SMP
82 } else {
83 #ifdef DOUBLE
84 mode = BLAS_DOUBLE | BLAS_COMPLEX;
85 #else
86 mode = BLAS_SINGLE | BLAS_COMPLEX;
87 #endif
88
89 blas_level1_thread(mode, n, 0, 0, alpha, x, incx, NULL, 0, NULL, 0, (void *)SCAL_K, nthreads);
90
91 }
92 #endif
93
94 FUNCTION_PROFILE_END(4, n, n);
95
96 IDEBUG_END;
97
98 return;
99
100 }
101