Coverage Report

Created: 2025-08-27 05:46

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/root/doris/contrib/openblas/interface/symv.c
Line
Count
Source
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 <ctype.h>
41
#include "common.h"
42
#ifdef FUNCTION_PROFILE
43
#include "functable.h"
44
#endif
45
46
#ifdef XDOUBLE
47
#define ERROR_NAME "QSYMV "
48
#elif defined(DOUBLE)
49
0
#define ERROR_NAME "DSYMV "
50
#else
51
#define ERROR_NAME "SSYMV "
52
#endif
53
54
#ifndef CBLAS
55
56
void NAME(char *UPLO, blasint *N, FLOAT  *ALPHA, FLOAT *a, blasint *LDA,
57
0
            FLOAT  *x, blasint *INCX, FLOAT *BETA, FLOAT *y, blasint *INCY){
58
59
0
  char uplo_arg = *UPLO;
60
0
  blasint n = *N;
61
0
  FLOAT alpha  = *ALPHA;
62
0
  blasint lda = *LDA;
63
0
  blasint incx  = *INCX;
64
0
  FLOAT beta = *BETA;
65
0
  blasint incy  = *INCY;
66
67
0
  int (*symv[])(BLASLONG, BLASLONG, FLOAT, FLOAT *, BLASLONG, FLOAT *, BLASLONG, FLOAT *, BLASLONG, FLOAT *) = {
68
0
    SYMV_U, SYMV_L,
69
0
  };
70
71
0
#ifdef SMP
72
0
  int (*symv_thread[])(BLASLONG, FLOAT, FLOAT *, BLASLONG, FLOAT *, BLASLONG, FLOAT *, BLASLONG, FLOAT *, int) = {
73
0
    SYMV_THREAD_U, SYMV_THREAD_L,
74
0
  };
75
0
#endif
76
77
0
  blasint info;
78
0
  int uplo;
79
0
  FLOAT *buffer;
80
0
#ifdef SMP
81
0
  int nthreads;
82
0
#endif
83
84
0
  PRINT_DEBUG_NAME;
85
86
0
  TOUPPER(uplo_arg);
87
0
  uplo  = -1;
88
89
0
  if (uplo_arg  == 'U') uplo  = 0;
90
0
  if (uplo_arg  == 'L') uplo  = 1;
91
92
0
  info = 0;
93
94
0
  if (incy == 0)          info = 10;
95
0
  if (incx == 0)          info =  7;
96
0
  if (lda  < MAX(1, n))   info =  5;
97
0
  if (n < 0)              info =  2;
98
0
  if (uplo  < 0)          info =  1;
99
100
0
  if (info != 0) {
101
0
    BLASFUNC(xerbla)(ERROR_NAME, &info, sizeof(ERROR_NAME));
102
0
    return;
103
0
  }
104
105
#else
106
107
void CNAME(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, blasint n, FLOAT alpha,
108
     FLOAT *a, blasint lda, FLOAT *x, blasint incx, FLOAT beta, FLOAT *y, blasint incy) {
109
110
  FLOAT *buffer;
111
  int uplo;
112
  blasint info;
113
#ifdef SMP
114
  int nthreads;
115
#endif
116
117
  int (*symv[])(BLASLONG, BLASLONG, FLOAT, FLOAT *, BLASLONG, FLOAT *, BLASLONG, FLOAT *, BLASLONG, FLOAT *) = {
118
    SYMV_U, SYMV_L,
119
  };
120
121
#ifdef SMP
122
  int (*symv_thread[])(BLASLONG, FLOAT, FLOAT *, BLASLONG, FLOAT *, BLASLONG, FLOAT *, BLASLONG, FLOAT *, int) = {
123
    SYMV_THREAD_U, SYMV_THREAD_L,
124
  };
125
#endif
126
127
  PRINT_DEBUG_CNAME;
128
129
  uplo  = -1;
130
  info  =  0;
131
132
  if (order == CblasColMajor) {
133
134
    if (Uplo == CblasUpper) uplo  = 0;
135
    if (Uplo == CblasLower) uplo  = 1;
136
137
    info = -1;
138
139
    if (incy == 0)          info = 10;
140
    if (incx == 0)          info =  7;
141
    if (lda  < MAX(1, n))   info =  5;
142
    if (n < 0)              info =  2;
143
    if (uplo  < 0)          info =  1;
144
  }
145
146
  if (order == CblasRowMajor) {
147
148
    if (Uplo == CblasUpper) uplo  = 1;
149
    if (Uplo == CblasLower) uplo  = 0;
150
151
    info = -1;
152
153
    if (incy == 0)          info = 10;
154
    if (incx == 0)          info =  7;
155
    if (lda  < MAX(1, n))   info =  5;
156
    if (n < 0)              info =  2;
157
    if (uplo  < 0)          info =  1;
158
  }
159
160
  if (info >= 0) {
161
    BLASFUNC(xerbla)(ERROR_NAME, &info, sizeof(ERROR_NAME));
162
    return;
163
  }
164
165
#endif
166
167
0
  if (n == 0) return;
168
169
0
  if (beta != ONE) SCAL_K(n, 0, 0, beta, y, blasabs(incy), NULL, 0, NULL, 0);
170
171
0
  if (alpha == ZERO) return;
172
173
0
  IDEBUG_START;
174
175
0
  FUNCTION_PROFILE_START();
176
177
0
  if (incx < 0 ) x -= (n - 1) * incx;
178
0
  if (incy < 0 ) y -= (n - 1) * incy;
179
180
0
  buffer = (FLOAT *)blas_memory_alloc(1);
181
182
0
#ifdef SMP
183
0
  if (n <200)
184
0
    nthreads=1;
185
0
  else
186
0
  nthreads = num_cpu_avail(2);
187
188
0
  if (nthreads == 1) {
189
0
#endif
190
191
0
  (symv[uplo])(n, n, alpha, a, lda, x, incx, y, incy, buffer);
192
193
0
#ifdef SMP
194
0
  } else {
195
196
0
    (symv_thread[uplo])(n, alpha, a, lda, x, incx, y, incy, buffer, nthreads);
197
198
0
  }
199
0
#endif
200
201
0
  blas_memory_free(buffer);
202
203
0
  FUNCTION_PROFILE_END(1, n * n / 2 + 2 * n,  2 * n * n);
204
205
0
  IDEBUG_END;
206
207
0
  return;
208
0
}