181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray#include <stdio.h>
281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray#include <stdlib.h>
381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray#include <string.h>
481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray#include <stdarg.h>
581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray#include "cblas.h"
681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray#include "cblas_f77.h"
781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray
881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murrayvoid cblas_xerbla(int info, const char *rout, const char *form, ...)
981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray{
1081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray   extern int RowMajorStrg;
1181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray   char empty[1] = "";
1281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray   va_list argptr;
1381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray
1481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray   va_start(argptr, form);
1581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray
1681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray   if (RowMajorStrg)
1781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray   {
1881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray      if (strstr(rout,"gemm") != 0)
1981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray      {
2081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray         if      (info == 5 ) info =  4;
2181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray         else if (info == 4 ) info =  5;
2281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray         else if (info == 11) info =  9;
2381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray         else if (info == 9 ) info = 11;
2481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray      }
2581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray      else if (strstr(rout,"symm") != 0 || strstr(rout,"hemm") != 0)
2681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray      {
2781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray         if      (info == 5 ) info =  4;
2881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray         else if (info == 4 ) info =  5;
2981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray      }
3081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray      else if (strstr(rout,"trmm") != 0 || strstr(rout,"trsm") != 0)
3181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray      {
3281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray         if      (info == 7 ) info =  6;
3381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray         else if (info == 6 ) info =  7;
3481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray      }
3581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray      else if (strstr(rout,"gemv") != 0)
3681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray      {
3781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray         if      (info == 4)  info = 3;
3881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray         else if (info == 3)  info = 4;
3981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray      }
4081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray      else if (strstr(rout,"gbmv") != 0)
4181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray      {
4281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray         if      (info == 4)  info = 3;
4381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray         else if (info == 3)  info = 4;
4481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray         else if (info == 6)  info = 5;
4581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray         else if (info == 5)  info = 6;
4681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray      }
4781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray      else if (strstr(rout,"ger") != 0)
4881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray      {
4981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray         if      (info == 3) info = 2;
5081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray         else if (info == 2) info = 3;
5181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray         else if (info == 8) info = 6;
5281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray         else if (info == 6) info = 8;
5381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray      }
5481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray      else if ( (strstr(rout,"her2") != 0 || strstr(rout,"hpr2") != 0)
5581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray                 && strstr(rout,"her2k") == 0 )
5681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray      {
5781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray         if      (info == 8) info = 6;
5881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray         else if (info == 6) info = 8;
5981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray      }
6081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray   }
6181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray   if (info)
6281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray      fprintf(stderr, "Parameter %d to routine %s was incorrect\n", info, rout);
6381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray   vfprintf(stderr, form, argptr);
6481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray   va_end(argptr);
6581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray   if (info && !info)
6681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray      F77_xerbla(empty, &info); /* Force link of our F77 error handler */
6781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray   exit(-1);
6881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray}
69