xref: /aosp_15_r20/external/cblas/src/cblas_xerbla.c (revision 1858f9982ea1ad57fb52080c08594e4d1cce4fa1)
1*1858f998SYi Kong #include <stdio.h>
2*1858f998SYi Kong #include <stdlib.h>
3*1858f998SYi Kong #include <string.h>
4*1858f998SYi Kong #include <stdarg.h>
5*1858f998SYi Kong #include "cblas.h"
6*1858f998SYi Kong #include "cblas_f77.h"
7*1858f998SYi Kong 
cblas_xerbla(int info,const char * rout,const char * form,...)8*1858f998SYi Kong void cblas_xerbla(int info, const char *rout, const char *form, ...)
9*1858f998SYi Kong {
10*1858f998SYi Kong    extern int RowMajorStrg;
11*1858f998SYi Kong    char empty[1] = "";
12*1858f998SYi Kong    va_list argptr;
13*1858f998SYi Kong 
14*1858f998SYi Kong    va_start(argptr, form);
15*1858f998SYi Kong 
16*1858f998SYi Kong    if (RowMajorStrg)
17*1858f998SYi Kong    {
18*1858f998SYi Kong       if (strstr(rout,"gemm") != 0)
19*1858f998SYi Kong       {
20*1858f998SYi Kong          if      (info == 5 ) info =  4;
21*1858f998SYi Kong          else if (info == 4 ) info =  5;
22*1858f998SYi Kong          else if (info == 11) info =  9;
23*1858f998SYi Kong          else if (info == 9 ) info = 11;
24*1858f998SYi Kong       }
25*1858f998SYi Kong       else if (strstr(rout,"symm") != 0 || strstr(rout,"hemm") != 0)
26*1858f998SYi Kong       {
27*1858f998SYi Kong          if      (info == 5 ) info =  4;
28*1858f998SYi Kong          else if (info == 4 ) info =  5;
29*1858f998SYi Kong       }
30*1858f998SYi Kong       else if (strstr(rout,"trmm") != 0 || strstr(rout,"trsm") != 0)
31*1858f998SYi Kong       {
32*1858f998SYi Kong          if      (info == 7 ) info =  6;
33*1858f998SYi Kong          else if (info == 6 ) info =  7;
34*1858f998SYi Kong       }
35*1858f998SYi Kong       else if (strstr(rout,"gemv") != 0)
36*1858f998SYi Kong       {
37*1858f998SYi Kong          if      (info == 4)  info = 3;
38*1858f998SYi Kong          else if (info == 3)  info = 4;
39*1858f998SYi Kong       }
40*1858f998SYi Kong       else if (strstr(rout,"gbmv") != 0)
41*1858f998SYi Kong       {
42*1858f998SYi Kong          if      (info == 4)  info = 3;
43*1858f998SYi Kong          else if (info == 3)  info = 4;
44*1858f998SYi Kong          else if (info == 6)  info = 5;
45*1858f998SYi Kong          else if (info == 5)  info = 6;
46*1858f998SYi Kong       }
47*1858f998SYi Kong       else if (strstr(rout,"ger") != 0)
48*1858f998SYi Kong       {
49*1858f998SYi Kong          if      (info == 3) info = 2;
50*1858f998SYi Kong          else if (info == 2) info = 3;
51*1858f998SYi Kong          else if (info == 8) info = 6;
52*1858f998SYi Kong          else if (info == 6) info = 8;
53*1858f998SYi Kong       }
54*1858f998SYi Kong       else if ( (strstr(rout,"her2") != 0 || strstr(rout,"hpr2") != 0)
55*1858f998SYi Kong                  && strstr(rout,"her2k") == 0 )
56*1858f998SYi Kong       {
57*1858f998SYi Kong          if      (info == 8) info = 6;
58*1858f998SYi Kong          else if (info == 6) info = 8;
59*1858f998SYi Kong       }
60*1858f998SYi Kong    }
61*1858f998SYi Kong    if (info)
62*1858f998SYi Kong       fprintf(stderr, "Parameter %d to routine %s was incorrect\n", info, rout);
63*1858f998SYi Kong    vfprintf(stderr, form, argptr);
64*1858f998SYi Kong    va_end(argptr);
65*1858f998SYi Kong    if (info && !info)
66*1858f998SYi Kong       F77_xerbla(empty, &info); /* Force link of our F77 error handler */
67*1858f998SYi Kong    exit(-1);
68*1858f998SYi Kong }
69