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