Fixed #395. Enable optimized cgemm for Sandybridge. Added optimized sdot kernel.
authorZhang Xianyi <traits.zhang@gmail.com>
Sun, 29 Jun 2014 02:34:51 +0000 (10:34 +0800)
committerZhang Xianyi <traits.zhang@gmail.com>
Sun, 29 Jun 2014 02:34:51 +0000 (10:34 +0800)
Fixed c/zgemm, zgemv computational error of haswell, piledriver, bullldozer, and
barcelona on Windows.

Merge branch 'develop' of https://github.com/wernsaar/OpenBLAS into wernsaar-develop

Conflicts:
kernel/Makefile.L1
kernel/x86_64/KERNEL
param.h

1  2 
Makefile
kernel/Makefile.L1
kernel/x86_64/KERNEL
kernel/x86_64/KERNEL.BARCELONA
kernel/x86_64/KERNEL.BOBCAT
kernel/x86_64/KERNEL.BULLDOZER
kernel/x86_64/KERNEL.OPTERON_SSE3
kernel/x86_64/KERNEL.PILEDRIVER
kernel/x86_64/KERNEL.PRESCOTT
kernel/x86_64/KERNEL.SANDYBRIDGE
param.h

diff --combined Makefile
+++ b/Makefile
@@@ -4,7 -4,7 +4,7 @@@ include ./Makefile.syste
  BLASDIRS = interface driver/level2 driver/level3 driver/others
  
  ifneq ($(DYNAMIC_ARCH), 1)
 -BLASDIRS += kernel 
 +BLASDIRS += kernel
  endif
  
  ifdef UTEST_CHECK
@@@ -23,7 -23,7 +23,7 @@@ endi
  SUBDIRS_ALL = $(SUBDIRS) test ctest utest exports benchmark ../laswp ../bench
  
  .PHONY : all libs netlib test ctest shared install
- .NOTPARALLEL : all libs prof lapack-test install
+ .NOTPARALLEL : all libs prof lapack-test install blas-test
  
  all :: libs netlib tests shared
        @echo
@@@ -153,7 -153,7 +153,7 @@@ endi
  ifeq ($(EXPRECISION), 1)
        @echo "#define EXPRECISION">> config_last.h
  endif
 -## 
 +##
  ifeq ($(DYNAMIC_ARCH), 1)
        @$(MAKE) -C kernel commonlibs || exit 1
        @for d in $(DYNAMIC_CORE) ; \
@@@ -187,7 -187,7 +187,7 @@@ blas 
        fi; \
        done
  
 -hpl : 
 +hpl :
        ln -fs $(LIBNAME) $(LIBPREFIX).$(LIBSUFFIX)
        for d in $(BLASDIRS) ../laswp exports ; \
        do if test -d $$d; then \
@@@ -210,7 -210,7 +210,7 @@@ hpl_p 
        done
  
  ifeq ($(NO_LAPACK), 1)
 -netlib : 
 +netlib :
  
  else
  netlib : lapack_prebuild
@@@ -255,7 -255,7 +255,7 @@@ endi
        -@cat  make.inc >> $(NETLIB_LAPACK_DIR)/make.inc
  endif
  
 -large.tgz : 
 +large.tgz :
  ifndef NOFORTRAN
        if [ ! -a $< ]; then
        -wget http://www.netlib.org/lapack/timing/large.tgz;
@@@ -282,6 -282,11 +282,11 @@@ lapack-test 
        make -j 1 -C $(NETLIB_LAPACK_DIR)/TESTING xeigtstc  xeigtstd  xeigtsts  xeigtstz  xlintstc  xlintstd  xlintstds  xlintstrfd  xlintstrfz  xlintsts  xlintstz  xlintstzc xlintstrfs xlintstrfc
        (cd $(NETLIB_LAPACK_DIR); ./lapack_testing.py -r )
  
+ blas-test:
+       (cd $(NETLIB_LAPACK_DIR)/BLAS && rm -f x* *.out)
+       make -j 1 -C $(NETLIB_LAPACK_DIR) blas_testing
+       (cd $(NETLIB_LAPACK_DIR)/BLAS && cat *.out)
  
  dummy :
  
diff --combined kernel/Makefile.L1
@@@ -435,19 -435,19 +435,19 @@@ endi
  ### AXPBY ###
  
  ifndef SAXPBYKERNEL
 -SAXPBYKERNEL = ../arm/axpby.c 
 +SAXPBYKERNEL = ../arm/axpby.c
  endif
  
  ifndef DAXPBYKERNEL
 -DAXPBYKERNEL = ../arm/axpby.c 
 +DAXPBYKERNEL = ../arm/axpby.c
  endif
  
  ifndef CAXPBYKERNEL
 -CAXPBYKERNEL = ../arm/zaxpby.c 
 +CAXPBYKERNEL = ../arm/zaxpby.c
  endif
  
  ifndef ZAXPBYKERNEL
 -ZAXPBYKERNEL = ../arm/zaxpby.c 
 +ZAXPBYKERNEL = ../arm/zaxpby.c
  endif
  
  SBLASOBJS     += \
@@@ -494,308 -494,320 +494,320 @@@ XBLASOBJS    += 
  
  
  
 -$(KDIR)samax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)samax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(SAMAXKERNEL) 
 +$(KDIR)samax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)samax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(SAMAXKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -UDOUBLE  -DUSE_ABS -UUSE_MIN $< -o $@
  
 -$(KDIR)damax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)damax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(DAMAXKERNEL) 
 +$(KDIR)damax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)damax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(DAMAXKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -DDOUBLE  -DUSE_ABS -UUSE_MIN $< -o $@
  
 -$(KDIR)qamax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)qamax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(QAMAXKERNEL) 
 +$(KDIR)qamax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)qamax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(QAMAXKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -DXDOUBLE -DUSE_ABS -UUSE_MIN $< -o $@
  
 -$(KDIR)camax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)camax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(CAMAXKERNEL) 
 +$(KDIR)camax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)camax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(CAMAXKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -UDOUBLE  -DUSE_ABS -UUSE_MIN $< -o $@
  
 -$(KDIR)zamax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)zamax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(ZAMAXKERNEL) 
 +$(KDIR)zamax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)zamax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(ZAMAXKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -DDOUBLE  -DUSE_ABS -UUSE_MIN $< -o $@
  
 -$(KDIR)xamax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)xamax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(XAMAXKERNEL) 
 +$(KDIR)xamax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)xamax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(XAMAXKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -DXDOUBLE -DUSE_ABS -UUSE_MIN $< -o $@
  
  ### AMIN ###
  
 -$(KDIR)samin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)samin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(SAMINKERNEL) 
 +$(KDIR)samin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)samin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(SAMINKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -UDOUBLE -DUSE_ABS  -DUSE_MIN $< -o $@
  
 -$(KDIR)damin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)damin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(DAMINKERNEL) 
 +$(KDIR)damin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)damin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(DAMINKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -DDOUBLE -DUSE_ABS  -DUSE_MIN $< -o $@
  
 -$(KDIR)qamin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)qamin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(QAMINKERNEL) 
 +$(KDIR)qamin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)qamin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(QAMINKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -DXDOUBLE -DUSE_ABS -DUSE_MIN $< -o $@
  
 -$(KDIR)camin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)camin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(CAMINKERNEL) 
 +$(KDIR)camin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)camin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(CAMINKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -UDOUBLE -DUSE_ABS  -DUSE_MIN $< -o $@
  
 -$(KDIR)zamin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)zamin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(ZAMINKERNEL) 
 +$(KDIR)zamin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)zamin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(ZAMINKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -DDOUBLE -DUSE_ABS  -DUSE_MIN $< -o $@
  
 -$(KDIR)xamin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)xamin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(XAMINKERNEL) 
 +$(KDIR)xamin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)xamin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(XAMINKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -DXDOUBLE -DUSE_ABS -DUSE_MIN $< -o $@
  
  ### MAX ###
  
 -$(KDIR)smax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)smax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(SMAXKERNEL) 
 +$(KDIR)smax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)smax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(SMAXKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -UDOUBLE -UUSE_ABS  -UUSE_MIN $< -o $@
  
 -$(KDIR)dmax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)dmax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(DMAXKERNEL) 
 +$(KDIR)dmax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)dmax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(DMAXKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -DDOUBLE -UUSE_ABS  -UUSE_MIN $< -o $@
  
 -$(KDIR)qmax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)qmax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(QMAXKERNEL) 
 +$(KDIR)qmax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)qmax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(QMAXKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -DXDOUBLE -UUSE_ABS -UUSE_MIN $< -o $@
  
  ### MIN ###
  
 -$(KDIR)smin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)smin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(SMINKERNEL) 
 +$(KDIR)smin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)smin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(SMINKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -UDOUBLE -UUSE_ABS  -DUSE_MIN $< -o $@
  
 -$(KDIR)dmin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)dmin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(DMINKERNEL) 
 +$(KDIR)dmin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)dmin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(DMINKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -DDOUBLE -UUSE_ABS  -DUSE_MIN $< -o $@
  
 -$(KDIR)qmin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)qmin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(QMINKERNEL) 
 +$(KDIR)qmin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)qmin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(QMINKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -DXDOUBLE -UUSE_ABS -DUSE_MIN $< -o $@
  
  
  ### IAMAX ###
  
 -$(KDIR)isamax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)isamax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(ISAMAXKERNEL) 
 +$(KDIR)isamax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)isamax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(ISAMAXKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -UDOUBLE -DUSE_ABS  -UUSE_MIN $< -o $@
  
 -$(KDIR)idamax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)idamax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(IDAMAXKERNEL) 
 +$(KDIR)idamax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)idamax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(IDAMAXKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -DDOUBLE -DUSE_ABS  -UUSE_MIN $< -o $@
  
 -$(KDIR)iqamax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)iqamax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(IQAMAXKERNEL) 
 +$(KDIR)iqamax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)iqamax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(IQAMAXKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -DXDOUBLE -DUSE_ABS -UUSE_MIN $< -o $@
  
 -$(KDIR)icamax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)icamax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(ICAMAXKERNEL) 
 +$(KDIR)icamax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)icamax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(ICAMAXKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -UDOUBLE -DUSE_ABS  -UUSE_MIN $< -o $@
  
 -$(KDIR)izamax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)izamax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(IZAMAXKERNEL) 
 +$(KDIR)izamax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)izamax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(IZAMAXKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -DDOUBLE -DUSE_ABS  -UUSE_MIN $< -o $@
  
 -$(KDIR)ixamax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)ixamax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(IXAMAXKERNEL) 
 +$(KDIR)ixamax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)ixamax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(IXAMAXKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -DXDOUBLE -DUSE_ABS -UUSE_MIN $< -o $@
  
  ### IAMIN ###
  
 -$(KDIR)isamin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)isamin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(ISAMINKERNEL) 
 +$(KDIR)isamin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)isamin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(ISAMINKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -UDOUBLE -DUSE_ABS  -DUSE_MIN $< -o $@
  
 -$(KDIR)idamin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)idamin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(IDAMINKERNEL) 
 +$(KDIR)idamin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)idamin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(IDAMINKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -DDOUBLE -DUSE_ABS  -DUSE_MIN $< -o $@
  
 -$(KDIR)iqamin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)iqamin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(IQAMINKERNEL) 
 +$(KDIR)iqamin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)iqamin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(IQAMINKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -DXDOUBLE -DUSE_ABS -DUSE_MIN $< -o $@
  
 -$(KDIR)icamin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)icamin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(ICAMINKERNEL) 
 +$(KDIR)icamin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)icamin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(ICAMINKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -UDOUBLE -DUSE_ABS  -DUSE_MIN $< -o $@
  
 -$(KDIR)izamin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)izamin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(IZAMINKERNEL) 
 +$(KDIR)izamin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)izamin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(IZAMINKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -DDOUBLE -DUSE_ABS  -DUSE_MIN $< -o $@
  
 -$(KDIR)ixamin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)ixamin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(IXAMINKERNEL) 
 +$(KDIR)ixamin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)ixamin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(IXAMINKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -DXDOUBLE -DUSE_ABS -DUSE_MIN $< -o $@
  
  ### IMAX ###
  
 -$(KDIR)ismax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)ismax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(ISMAXKERNEL) 
 +$(KDIR)ismax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)ismax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(ISMAXKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -UDOUBLE -UUSE_ABS  -UUSE_MIN $< -o $@
  
 -$(KDIR)idmax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)idmax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(IDMAXKERNEL) 
 +$(KDIR)idmax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)idmax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(IDMAXKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -DDOUBLE -UUSE_ABS  -UUSE_MIN $< -o $@
  
 -$(KDIR)iqmax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)iqmax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(IQMAXKERNEL) 
 +$(KDIR)iqmax_k$(TSUFFIX).$(SUFFIX)  $(KDIR)iqmax_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(IQMAXKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -DXDOUBLE -UUSE_ABS -UUSE_MIN $< -o $@
  
  ### IMIN ###
  
 -$(KDIR)ismin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)ismin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(ISMINKERNEL) 
 +$(KDIR)ismin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)ismin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(ISMINKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -UDOUBLE -UUSE_ABS  -DUSE_MIN $< -o $@
  
 -$(KDIR)idmin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)idmin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(IDMINKERNEL) 
 +$(KDIR)idmin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)idmin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(IDMINKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -DDOUBLE -UUSE_ABS  -DUSE_MIN $< -o $@
  
 -$(KDIR)iqmin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)iqmin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(IQMINKERNEL) 
 +$(KDIR)iqmin_k$(TSUFFIX).$(SUFFIX)  $(KDIR)iqmin_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(IQMINKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -DXDOUBLE -UUSE_ABS -DUSE_MIN $< -o $@
  
  
 -$(KDIR)sasum_k$(TSUFFIX).$(SUFFIX)   $(KDIR)sasum_k$(TPSUFFIX).$(PSUFFIX)   : $(KERNELDIR)/$(SASUMKERNEL) 
 +$(KDIR)sasum_k$(TSUFFIX).$(SUFFIX)   $(KDIR)sasum_k$(TPSUFFIX).$(PSUFFIX)   : $(KERNELDIR)/$(SASUMKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -UDOUBLE $< -o $@
  
 -$(KDIR)dasum_k$(TSUFFIX).$(SUFFIX)   $(KDIR)dasum_k$(TPSUFFIX).$(PSUFFIX)   : $(KERNELDIR)/$(DASUMKERNEL) 
 +$(KDIR)dasum_k$(TSUFFIX).$(SUFFIX)   $(KDIR)dasum_k$(TPSUFFIX).$(PSUFFIX)   : $(KERNELDIR)/$(DASUMKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -DDOUBLE $< -o $@
  
 -$(KDIR)qasum_k$(TSUFFIX).$(SUFFIX)   $(KDIR)qasum_k$(TPSUFFIX).$(PSUFFIX)   : $(KERNELDIR)/$(QASUMKERNEL) 
 +$(KDIR)qasum_k$(TSUFFIX).$(SUFFIX)   $(KDIR)qasum_k$(TPSUFFIX).$(PSUFFIX)   : $(KERNELDIR)/$(QASUMKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -DXDOUBLE $< -o $@
  
 -$(KDIR)casum_k$(TSUFFIX).$(SUFFIX)  $(KDIR)casum_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(CASUMKERNEL) 
 +$(KDIR)casum_k$(TSUFFIX).$(SUFFIX)  $(KDIR)casum_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(CASUMKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -UDOUBLE $< -o $@
  
 -$(KDIR)zasum_k$(TSUFFIX).$(SUFFIX)  $(KDIR)zasum_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(ZASUMKERNEL) 
 +$(KDIR)zasum_k$(TSUFFIX).$(SUFFIX)  $(KDIR)zasum_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(ZASUMKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -DDOUBLE $< -o $@
  
 -$(KDIR)xasum_k$(TSUFFIX).$(SUFFIX)  $(KDIR)xasum_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(XASUMKERNEL) 
 +$(KDIR)xasum_k$(TSUFFIX).$(SUFFIX)  $(KDIR)xasum_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(XASUMKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -DXDOUBLE $< -o $@
  
 -$(KDIR)saxpy_k$(TSUFFIX).$(SUFFIX)  $(KDIR)saxpy_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(SAXPYKERNEL) 
 +$(KDIR)saxpy_k$(TSUFFIX).$(SUFFIX)  $(KDIR)saxpy_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(SAXPYKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -UCOMPLEX -UDOUBLE $< -o $@
  
 -$(KDIR)daxpy_k$(TSUFFIX).$(SUFFIX)  $(KDIR)daxpy_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(DAXPYKERNEL) 
 +$(KDIR)daxpy_k$(TSUFFIX).$(SUFFIX)  $(KDIR)daxpy_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(DAXPYKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -UCOMPLEX -DDOUBLE $< -o $@
  
 -$(KDIR)qaxpy_k$(TSUFFIX).$(SUFFIX)  $(KDIR)qaxpy_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(QAXPYKERNEL) 
 +$(KDIR)qaxpy_k$(TSUFFIX).$(SUFFIX)  $(KDIR)qaxpy_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(QAXPYKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -UCOMPLEX -DXDOUBLE $< -o $@
  
 -$(KDIR)caxpy_k$(TSUFFIX).$(SUFFIX)  $(KDIR)caxpy_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(CAXPYKERNEL) 
 +$(KDIR)caxpy_k$(TSUFFIX).$(SUFFIX)  $(KDIR)caxpy_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(CAXPYKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -DCOMPLEX -UCONJ -UDOUBLE $< -o $@
  
 -$(KDIR)zaxpy_k$(TSUFFIX).$(SUFFIX)  $(KDIR)zaxpy_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(ZAXPYKERNEL) 
 +$(KDIR)zaxpy_k$(TSUFFIX).$(SUFFIX)  $(KDIR)zaxpy_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(ZAXPYKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -DCOMPLEX -UCONJ -DDOUBLE $< -o $@
  
 -$(KDIR)xaxpy_k$(TSUFFIX).$(SUFFIX)  $(KDIR)xaxpy_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(XAXPYKERNEL) 
 +$(KDIR)xaxpy_k$(TSUFFIX).$(SUFFIX)  $(KDIR)xaxpy_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(XAXPYKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -DCOMPLEX -UCONJ -DXDOUBLE $< -o $@
  
 -$(KDIR)caxpyc_k$(TSUFFIX).$(SUFFIX)  $(KDIR)caxpyc_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(CAXPYKERNEL) 
 +$(KDIR)caxpyc_k$(TSUFFIX).$(SUFFIX)  $(KDIR)caxpyc_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(CAXPYKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -DCOMPLEX -DCONJ -UDOUBLE $< -o $@
  
 -$(KDIR)zaxpyc_k$(TSUFFIX).$(SUFFIX)  $(KDIR)zaxpyc_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(ZAXPYKERNEL) 
 +$(KDIR)zaxpyc_k$(TSUFFIX).$(SUFFIX)  $(KDIR)zaxpyc_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(ZAXPYKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -DCOMPLEX -DCONJ -DDOUBLE $< -o $@
  
 -$(KDIR)xaxpyc_k$(TSUFFIX).$(SUFFIX)  $(KDIR)xaxpyc_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(XAXPYKERNEL) 
 +$(KDIR)xaxpyc_k$(TSUFFIX).$(SUFFIX)  $(KDIR)xaxpyc_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(XAXPYKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -DCOMPLEX -DCONJ -DXDOUBLE $< -o $@
  
 -$(KDIR)scopy_k$(TSUFFIX).$(SUFFIX) $(KDIR)scopy_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(SCOPYKERNEL) 
 +$(KDIR)scopy_k$(TSUFFIX).$(SUFFIX) $(KDIR)scopy_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(SCOPYKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -UDOUBLE -UCOMPLEX -DC_INTERFACE $< -o $@
  
 -$(KDIR)dcopy_k$(TSUFFIX).$(SUFFIX) $(KDIR)dcopy_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(DCOPYKERNEL) 
 +$(KDIR)dcopy_k$(TSUFFIX).$(SUFFIX) $(KDIR)dcopy_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(DCOPYKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -DDOUBLE -UCOMPLEX -DC_INTERFACE $< -o $@
  
 -$(KDIR)qcopy_k$(TSUFFIX).$(SUFFIX) $(KDIR)qcopy_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(QCOPYKERNEL) 
 +$(KDIR)qcopy_k$(TSUFFIX).$(SUFFIX) $(KDIR)qcopy_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(QCOPYKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -DXDOUBLE -UCOMPLEX -DC_INTERFACE $< -o $@
  
 -$(KDIR)ccopy_k$(TSUFFIX).$(SUFFIX) $(KDIR)ccopy_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(CCOPYKERNEL) 
 +$(KDIR)ccopy_k$(TSUFFIX).$(SUFFIX) $(KDIR)ccopy_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(CCOPYKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -UDOUBLE -DCOMPLEX -DC_INTERFACE $< -o $@
  
 -$(KDIR)zcopy_k$(TSUFFIX).$(SUFFIX) $(KDIR)zcopy_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(ZCOPYKERNEL) 
 +$(KDIR)zcopy_k$(TSUFFIX).$(SUFFIX) $(KDIR)zcopy_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(ZCOPYKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -DDOUBLE -DCOMPLEX -DC_INTERFACE $< -o $@
  
 -$(KDIR)xcopy_k$(TSUFFIX).$(SUFFIX) $(KDIR)xcopy_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(XCOPYKERNEL) 
 +$(KDIR)xcopy_k$(TSUFFIX).$(SUFFIX) $(KDIR)xcopy_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(XCOPYKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -DXDOUBLE -DCOMPLEX -DC_INTERFACE $< -o $@
  
 -$(KDIR)ddot_k$(TSUFFIX).$(SUFFIX) $(KDIR)ddot_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(DDOTKERNEL) 
 +$(KDIR)ddot_k$(TSUFFIX).$(SUFFIX) $(KDIR)ddot_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(DDOTKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -DDOUBLE $< -o $@
  
 -$(KDIR)qdot_k$(TSUFFIX).$(SUFFIX) $(KDIR)qdot_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(QDOTKERNEL) 
 +$(KDIR)qdot_k$(TSUFFIX).$(SUFFIX) $(KDIR)qdot_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(QDOTKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -DXDOUBLE $< -o $@
  
- $(KDIR)dsdot_k$(TSUFFIX).$(SUFFIX) $(KDIR)dsdot_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(SDOTKERNEL)
-       $(CC) -c $(CFLAGS) -UCOMPLEX -UDOUBLE -DDSDOT $< -o $@
 -$(KDIR)sdot_k$(TSUFFIX).$(SUFFIX) $(KDIR)sdot_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(SDOTKERNEL) 
 +$(KDIR)sdot_k$(TSUFFIX).$(SUFFIX) $(KDIR)sdot_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(SDOTKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -UDOUBLE $< -o $@
  
 -$(KDIR)dsdot_k$(TSUFFIX).$(SUFFIX) $(KDIR)dsdot_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(DSDOTKERNEL) 
+ ifdef DSDOTKERNEL
 -$(KDIR)sdsdot_k$(TSUFFIX).$(SUFFIX) $(KDIR)sdsdot_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(DSDOTKERNEL) 
++$(KDIR)dsdot_k$(TSUFFIX).$(SUFFIX) $(KDIR)dsdot_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(DSDOTKERNEL)
+       $(CC) -c $(CFLAGS) -UCOMPLEX -UDOUBLE -DDSDOT $< -o $@
 -$(KDIR)dsdot_k$(TSUFFIX).$(SUFFIX) $(KDIR)dsdot_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(SDOTKERNEL) 
++$(KDIR)sdsdot_k$(TSUFFIX).$(SUFFIX) $(KDIR)sdsdot_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(DSDOTKERNEL)
+       $(CC) -c $(CFLAGS) -UCOMPLEX -UDOUBLE -DDSDOT $< -o $@
+ else
 -$(KDIR)sdsdot_k$(TSUFFIX).$(SUFFIX) $(KDIR)sdsdot_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(SDOTKERNEL) 
++$(KDIR)dsdot_k$(TSUFFIX).$(SUFFIX) $(KDIR)dsdot_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(SDOTKERNEL)
+       $(CC) -c $(CFLAGS) -UCOMPLEX -UDOUBLE -DDSDOT $< -o $@
 +$(KDIR)sdsdot_k$(TSUFFIX).$(SUFFIX) $(KDIR)sdsdot_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(SDOTKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -UDOUBLE -DDSDOT $< -o $@
  
 -$(KDIR)zdotu_k$(TSUFFIX).$(SUFFIX) $(KDIR)zdotu_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(ZDOTKERNEL) 
+ endif
 +$(KDIR)zdotu_k$(TSUFFIX).$(SUFFIX) $(KDIR)zdotu_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(ZDOTKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -DDOUBLE -UCONJ $< -o $@
  
 -$(KDIR)zdotc_k$(TSUFFIX).$(SUFFIX) $(KDIR)zdotc_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(ZDOTKERNEL) 
 +$(KDIR)zdotc_k$(TSUFFIX).$(SUFFIX) $(KDIR)zdotc_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(ZDOTKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -DDOUBLE -DCONJ $< -o $@
  
 -$(KDIR)xdotu_k$(TSUFFIX).$(SUFFIX) $(KDIR)xdotu_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(XDOTKERNEL) 
 +$(KDIR)xdotu_k$(TSUFFIX).$(SUFFIX) $(KDIR)xdotu_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(XDOTKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -DXDOUBLE -UCONJ $< -o $@
  
 -$(KDIR)xdotc_k$(TSUFFIX).$(SUFFIX) $(KDIR)xdotc_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(XDOTKERNEL) 
 +$(KDIR)xdotc_k$(TSUFFIX).$(SUFFIX) $(KDIR)xdotc_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(XDOTKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -DXDOUBLE -DCONJ $< -o $@
  
 -$(KDIR)cdotu_k$(TSUFFIX).$(SUFFIX) $(KDIR)cdotu_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(CDOTKERNEL) 
 +$(KDIR)cdotu_k$(TSUFFIX).$(SUFFIX) $(KDIR)cdotu_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(CDOTKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -UDOUBLE -UCONJ $< -o $@
  
 -$(KDIR)cdotc_k$(TSUFFIX).$(SUFFIX) $(KDIR)cdotc_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(CDOTKERNEL) 
 +$(KDIR)cdotc_k$(TSUFFIX).$(SUFFIX) $(KDIR)cdotc_k$(TPSUFFIX).$(PSUFFIX) : $(KERNELDIR)/$(CDOTKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -UDOUBLE -DCONJ $< -o $@
  
 -$(KDIR)snrm2_k$(TSUFFIX).$(SUFFIX)  $(KDIR)snrm2_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(SNRM2KERNEL) 
 +$(KDIR)snrm2_k$(TSUFFIX).$(SUFFIX)  $(KDIR)snrm2_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(SNRM2KERNEL)
        $(CC) $(CFLAGS) -UCOMPLEX -c -UDOUBLE $< -o $@
  
 -$(KDIR)dnrm2_k$(TSUFFIX).$(SUFFIX)  $(KDIR)dnrm2_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(DNRM2KERNEL) 
 +$(KDIR)dnrm2_k$(TSUFFIX).$(SUFFIX)  $(KDIR)dnrm2_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(DNRM2KERNEL)
        $(CC) $(CFLAGS) -UCOMPLEX -c -DDOUBLE $< -o $@
  
 -$(KDIR)qnrm2_k$(TSUFFIX).$(SUFFIX)  $(KDIR)qnrm2_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(QNRM2KERNEL) 
 +$(KDIR)qnrm2_k$(TSUFFIX).$(SUFFIX)  $(KDIR)qnrm2_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(QNRM2KERNEL)
        $(CC) $(CFLAGS) -UCOMPLEX -c -DXDOUBLE $< -o $@
  
 -$(KDIR)cnrm2_k$(TSUFFIX).$(SUFFIX)  $(KDIR)cnrm2_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(CNRM2KERNEL) 
 +$(KDIR)cnrm2_k$(TSUFFIX).$(SUFFIX)  $(KDIR)cnrm2_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(CNRM2KERNEL)
        $(CC) $(CFLAGS) -DCOMPLEX -c -UDOUBLE $< -o $@
  
 -$(KDIR)znrm2_k$(TSUFFIX).$(SUFFIX)  $(KDIR)znrm2_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(ZNRM2KERNEL) 
 +$(KDIR)znrm2_k$(TSUFFIX).$(SUFFIX)  $(KDIR)znrm2_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(ZNRM2KERNEL)
        $(CC) $(CFLAGS) -DCOMPLEX -c -DDOUBLE $< -o $@
  
 -$(KDIR)xnrm2_k$(TSUFFIX).$(SUFFIX)  $(KDIR)xnrm2_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(XNRM2KERNEL) 
 +$(KDIR)xnrm2_k$(TSUFFIX).$(SUFFIX)  $(KDIR)xnrm2_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(XNRM2KERNEL)
        $(CC) $(CFLAGS) -DCOMPLEX -c -DXDOUBLE $< -o $@
  
 -$(KDIR)srot_k$(TSUFFIX).$(SUFFIX)  $(KDIR)srot_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(SROTKERNEL) 
 +$(KDIR)srot_k$(TSUFFIX).$(SUFFIX)  $(KDIR)srot_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(SROTKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -UCOMPLEX -UDOUBLE  $< -o $@
  
 -$(KDIR)drot_k$(TSUFFIX).$(SUFFIX)  $(KDIR)drot_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(DROTKERNEL) 
 +$(KDIR)drot_k$(TSUFFIX).$(SUFFIX)  $(KDIR)drot_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(DROTKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -UCOMPLEX -DDOUBLE  $< -o $@
  
 -$(KDIR)qrot_k$(TSUFFIX).$(SUFFIX)  $(KDIR)qrot_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(QROTKERNEL) 
 +$(KDIR)qrot_k$(TSUFFIX).$(SUFFIX)  $(KDIR)qrot_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(QROTKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -UCOMPLEX -DXDOUBLE $< -o $@
  
 -$(KDIR)csrot_k$(TSUFFIX).$(SUFFIX)  $(KDIR)csrot_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(CROTKERNEL) 
 +$(KDIR)csrot_k$(TSUFFIX).$(SUFFIX)  $(KDIR)csrot_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(CROTKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -DCOMPLEX -UDOUBLE  $< -o $@
  
 -$(KDIR)zdrot_k$(TSUFFIX).$(SUFFIX)  $(KDIR)zdrot_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(ZROTKERNEL) 
 +$(KDIR)zdrot_k$(TSUFFIX).$(SUFFIX)  $(KDIR)zdrot_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(ZROTKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -DCOMPLEX -DDOUBLE  $< -o $@
  
 -$(KDIR)xqrot_k$(TSUFFIX).$(SUFFIX)  $(KDIR)xqrot_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(XROTKERNEL) 
 +$(KDIR)xqrot_k$(TSUFFIX).$(SUFFIX)  $(KDIR)xqrot_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(XROTKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -DCOMPLEX -DXDOUBLE $< -o $@
  
 -$(KDIR)sscal_k$(TSUFFIX).$(SUFFIX)  $(KDIR)sscal_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(SSCALKERNEL) 
 +$(KDIR)sscal_k$(TSUFFIX).$(SUFFIX)  $(KDIR)sscal_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(SSCALKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -UDOUBLE $< -o $@
  
 -$(KDIR)dscal_k$(TSUFFIX).$(SUFFIX)  $(KDIR)dscal_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(DSCALKERNEL) 
 +$(KDIR)dscal_k$(TSUFFIX).$(SUFFIX)  $(KDIR)dscal_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(DSCALKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -DDOUBLE $< -o $@
  
 -$(KDIR)qscal_k$(TSUFFIX).$(SUFFIX)  $(KDIR)qscal_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(QSCALKERNEL) 
 +$(KDIR)qscal_k$(TSUFFIX).$(SUFFIX)  $(KDIR)qscal_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(QSCALKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -DXDOUBLE $< -o $@
  
 -$(KDIR)cscal_k$(TSUFFIX).$(SUFFIX)  $(KDIR)cscal_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(CSCALKERNEL) 
 +$(KDIR)cscal_k$(TSUFFIX).$(SUFFIX)  $(KDIR)cscal_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(CSCALKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -UDOUBLE $< -o $@
  
 -$(KDIR)zscal_k$(TSUFFIX).$(SUFFIX)  $(KDIR)zscal_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(ZSCALKERNEL) 
 +$(KDIR)zscal_k$(TSUFFIX).$(SUFFIX)  $(KDIR)zscal_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(ZSCALKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -DDOUBLE $< -o $@
  
 -$(KDIR)xscal_k$(TSUFFIX).$(SUFFIX)  $(KDIR)xscal_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(XSCALKERNEL) 
 +$(KDIR)xscal_k$(TSUFFIX).$(SUFFIX)  $(KDIR)xscal_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(XSCALKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -DXDOUBLE $< -o $@
  
 -$(KDIR)sswap_k$(TSUFFIX).$(SUFFIX)  $(KDIR)sswap_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(SSWAPKERNEL) 
 +$(KDIR)sswap_k$(TSUFFIX).$(SUFFIX)  $(KDIR)sswap_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(SSWAPKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -UDOUBLE $< -o $@
  
 -$(KDIR)dswap_k$(TSUFFIX).$(SUFFIX)  $(KDIR)dswap_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(DSWAPKERNEL) 
 +$(KDIR)dswap_k$(TSUFFIX).$(SUFFIX)  $(KDIR)dswap_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(DSWAPKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -DDOUBLE $< -o $@
  
 -$(KDIR)qswap_k$(TSUFFIX).$(SUFFIX)  $(KDIR)qswap_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(QSWAPKERNEL) 
 +$(KDIR)qswap_k$(TSUFFIX).$(SUFFIX)  $(KDIR)qswap_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(QSWAPKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -DXDOUBLE $< -o $@
  
 -$(KDIR)cswap_k$(TSUFFIX).$(SUFFIX)  $(KDIR)cswap_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(CSWAPKERNEL) 
 +$(KDIR)cswap_k$(TSUFFIX).$(SUFFIX)  $(KDIR)cswap_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(CSWAPKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -UDOUBLE $< -o $@
  
 -$(KDIR)zswap_k$(TSUFFIX).$(SUFFIX)  $(KDIR)zswap_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(ZSWAPKERNEL) 
 +$(KDIR)zswap_k$(TSUFFIX).$(SUFFIX)  $(KDIR)zswap_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(ZSWAPKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -DDOUBLE $< -o $@
  
 -$(KDIR)xswap_k$(TSUFFIX).$(SUFFIX)  $(KDIR)xswap_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(XSWAPKERNEL) 
 +$(KDIR)xswap_k$(TSUFFIX).$(SUFFIX)  $(KDIR)xswap_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(XSWAPKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -DXDOUBLE $< -o $@
  
 -$(KDIR)saxpby_k$(TSUFFIX).$(SUFFIX)  $(KDIR)saxpby_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(SAXPBYKERNEL) 
 +$(KDIR)saxpby_k$(TSUFFIX).$(SUFFIX)  $(KDIR)saxpby_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(SAXPBYKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -UCOMPLEX -UDOUBLE $< -o $@
  
 -$(KDIR)daxpby_k$(TSUFFIX).$(SUFFIX)  $(KDIR)daxpby_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(DAXPBYKERNEL) 
 +$(KDIR)daxpby_k$(TSUFFIX).$(SUFFIX)  $(KDIR)daxpby_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(DAXPBYKERNEL)
        $(CC) -c $(CFLAGS) -UCOMPLEX -UCOMPLEX -DDOUBLE $< -o $@
  
 -$(KDIR)caxpby_k$(TSUFFIX).$(SUFFIX)  $(KDIR)caxpby_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(CAXPBYKERNEL) 
 +$(KDIR)caxpby_k$(TSUFFIX).$(SUFFIX)  $(KDIR)caxpby_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(CAXPBYKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -DCOMPLEX -UCONJ -UDOUBLE $< -o $@
  
 -$(KDIR)zaxpby_k$(TSUFFIX).$(SUFFIX)  $(KDIR)zaxpby_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(ZAXPBYKERNEL) 
 +$(KDIR)zaxpby_k$(TSUFFIX).$(SUFFIX)  $(KDIR)zaxpby_k$(TPSUFFIX).$(PSUFFIX)  : $(KERNELDIR)/$(ZAXPBYKERNEL)
        $(CC) -c $(CFLAGS) -DCOMPLEX -DCOMPLEX -UCONJ -DDOUBLE $< -o $@
  
  
diff --combined kernel/x86_64/KERNEL
@@@ -119,9 -119,15 +119,15 @@@ XCOPYKERNEL = zcopy.
  endif
  
  ifndef SDOTKERNEL
- SDOTKERNEL = ../arm/dot.c
 -SDOTKERNEL = dot_sse.S 
++SDOTKERNEL = dot_sse.S
  endif
  
+ ifndef DSDOTKERNEL
+ DSDOTKERNEL = ../arm/dot.c 
+ endif
  ifndef DDOTKERNEL
  DDOTKERNEL =  dot_sse2.S
  endif
@@@ -2,15 -2,15 +2,15 @@@ SGEMVNKERNEL = sgemv_n.
  SGEMVTKERNEL = sgemv_t.S
  
  ZGEMVNKERNEL = zgemv_n_dup.S
- ZGEMVTKERNEL = zgemv_t_dup.S
+ ZGEMVTKERNEL = zgemv_t.S
  
  SGEMMKERNEL    =  gemm_kernel_8x4_barcelona.S
  SGEMMINCOPY    =  ../generic/gemm_ncopy_8.c
  SGEMMITCOPY    =  ../generic/gemm_tcopy_8.c
  SGEMMONCOPY    =  gemm_ncopy_4_opteron.S
  SGEMMOTCOPY    =  gemm_tcopy_4_opteron.S
 -SGEMMINCOPYOBJ =  sgemm_incopy$(TSUFFIX).$(SUFFIX) 
 -SGEMMITCOPYOBJ =  sgemm_itcopy$(TSUFFIX).$(SUFFIX) 
 +SGEMMINCOPYOBJ =  sgemm_incopy$(TSUFFIX).$(SUFFIX)
 +SGEMMITCOPYOBJ =  sgemm_itcopy$(TSUFFIX).$(SUFFIX)
  SGEMMONCOPYOBJ =  sgemm_oncopy$(TSUFFIX).$(SUFFIX)
  SGEMMOTCOPYOBJ =  sgemm_otcopy$(TSUFFIX).$(SUFFIX)
  DGEMMKERNEL    =  gemm_kernel_4x4_barcelona.S
@@@ -1,13 -1,13 +1,13 @@@
  ZGEMVNKERNEL = zgemv_n_dup.S
- ZGEMVTKERNEL = zgemv_t_dup.S
+ ZGEMVTKERNEL = zgemv_t.S
  
  SGEMMKERNEL    =  gemm_kernel_8x4_barcelona.S
  SGEMMINCOPY    =  ../generic/gemm_ncopy_8.c
  SGEMMITCOPY    =  ../generic/gemm_tcopy_8.c
  SGEMMONCOPY    =  gemm_ncopy_4_opteron.S
  SGEMMOTCOPY    =  gemm_tcopy_4_opteron.S
 -SGEMMINCOPYOBJ =  sgemm_incopy$(TSUFFIX).$(SUFFIX) 
 -SGEMMITCOPYOBJ =  sgemm_itcopy$(TSUFFIX).$(SUFFIX) 
 +SGEMMINCOPYOBJ =  sgemm_incopy$(TSUFFIX).$(SUFFIX)
 +SGEMMITCOPYOBJ =  sgemm_itcopy$(TSUFFIX).$(SUFFIX)
  SGEMMONCOPYOBJ =  sgemm_oncopy$(TSUFFIX).$(SUFFIX)
  SGEMMOTCOPYOBJ =  sgemm_otcopy$(TSUFFIX).$(SUFFIX)
  DGEMMKERNEL    =  gemm_kernel_4x4_barcelona.S
@@@ -2,7 -2,7 +2,7 @@@ SGEMVNKERNEL = sgemv_n.
  SGEMVTKERNEL = sgemv_t.S
  
  ZGEMVNKERNEL = zgemv_n_dup.S
- ZGEMVTKERNEL = zgemv_t_dup.S
+ ZGEMVTKERNEL = zgemv_t.S
  
  DGEMVNKERNEL = dgemv_n_bulldozer.S
  DGEMVTKERNEL = dgemv_t_bulldozer.S
@@@ -16,8 -16,8 +16,8 @@@ SGEMMITCOPY    =  ../generic/gemm_tcopy
  SGEMMONCOPY    =  gemm_ncopy_2_bulldozer.S
  SGEMMOTCOPY    =  gemm_tcopy_2_bulldozer.S
  
 -SGEMMINCOPYOBJ =  sgemm_incopy$(TSUFFIX).$(SUFFIX) 
 -SGEMMITCOPYOBJ =  sgemm_itcopy$(TSUFFIX).$(SUFFIX) 
 +SGEMMINCOPYOBJ =  sgemm_incopy$(TSUFFIX).$(SUFFIX)
 +SGEMMITCOPYOBJ =  sgemm_itcopy$(TSUFFIX).$(SUFFIX)
  SGEMMONCOPYOBJ =  sgemm_oncopy$(TSUFFIX).$(SUFFIX)
  SGEMMOTCOPYOBJ =  sgemm_otcopy$(TSUFFIX).$(SUFFIX)
  DGEMMKERNEL    =  dgemm_kernel_8x2_bulldozer.S
@@@ -1,13 -1,13 +1,13 @@@
  ZGEMVNKERNEL = zgemv_n_dup.S
- ZGEMVTKERNEL = zgemv_t_dup.S
+ ZGEMVTKERNEL = zgemv_t.S
  
  SGEMMKERNEL    =  gemm_kernel_8x4_sse.S
  SGEMMINCOPY    =  ../generic/gemm_ncopy_8.c
  SGEMMITCOPY    =  ../generic/gemm_tcopy_8.c
  SGEMMONCOPY    =  gemm_ncopy_4_opteron.S
  SGEMMOTCOPY    =  gemm_tcopy_4_opteron.S
 -SGEMMINCOPYOBJ =  sgemm_incopy$(TSUFFIX).$(SUFFIX) 
 -SGEMMITCOPYOBJ =  sgemm_itcopy$(TSUFFIX).$(SUFFIX) 
 +SGEMMINCOPYOBJ =  sgemm_incopy$(TSUFFIX).$(SUFFIX)
 +SGEMMITCOPYOBJ =  sgemm_itcopy$(TSUFFIX).$(SUFFIX)
  SGEMMONCOPYOBJ =  sgemm_oncopy$(TSUFFIX).$(SUFFIX)
  SGEMMOTCOPYOBJ =  sgemm_otcopy$(TSUFFIX).$(SUFFIX)
  DGEMMKERNEL    =  gemm_kernel_4x4_sse2.S
@@@ -2,7 -2,7 +2,7 @@@ SGEMVNKERNEL = sgemv_n.
  SGEMVTKERNEL = sgemv_t.S
  
  ZGEMVNKERNEL = zgemv_n_dup.S
- ZGEMVTKERNEL = zgemv_t_dup.S
+ ZGEMVTKERNEL = zgemv_t.S
  
  DGEMVNKERNEL = dgemv_n_bulldozer.S
  DGEMVTKERNEL = dgemv_t_bulldozer.S
@@@ -15,8 -15,8 +15,8 @@@ SGEMMINCOPY    =  ../generic/gemm_ncopy
  SGEMMITCOPY    =  ../generic/gemm_tcopy_16.c
  SGEMMONCOPY    =  gemm_ncopy_2_bulldozer.S
  SGEMMOTCOPY    =  gemm_tcopy_2_bulldozer.S
 -SGEMMINCOPYOBJ =  sgemm_incopy$(TSUFFIX).$(SUFFIX) 
 -SGEMMITCOPYOBJ =  sgemm_itcopy$(TSUFFIX).$(SUFFIX) 
 +SGEMMINCOPYOBJ =  sgemm_incopy$(TSUFFIX).$(SUFFIX)
 +SGEMMITCOPYOBJ =  sgemm_itcopy$(TSUFFIX).$(SUFFIX)
  SGEMMONCOPYOBJ =  sgemm_oncopy$(TSUFFIX).$(SUFFIX)
  SGEMMOTCOPYOBJ =  sgemm_otcopy$(TSUFFIX).$(SUFFIX)
  
@@@ -1,13 -1,13 +1,13 @@@
  ZGEMVNKERNEL = zgemv_n_dup.S
- ZGEMVTKERNEL = zgemv_t_dup.S
+ ZGEMVTKERNEL = zgemv_t.S
  
  SGEMMKERNEL    =  gemm_kernel_8x4_sse3.S
  SGEMMINCOPY    =  ../generic/gemm_ncopy_8.c
  SGEMMITCOPY    =  ../generic/gemm_tcopy_8.c
  SGEMMONCOPY    =  gemm_ncopy_4.S
  SGEMMOTCOPY    =  gemm_tcopy_4.S
 -SGEMMINCOPYOBJ =  sgemm_incopy$(TSUFFIX).$(SUFFIX) 
 -SGEMMITCOPYOBJ =  sgemm_itcopy$(TSUFFIX).$(SUFFIX) 
 +SGEMMINCOPYOBJ =  sgemm_incopy$(TSUFFIX).$(SUFFIX)
 +SGEMMITCOPYOBJ =  sgemm_itcopy$(TSUFFIX).$(SUFFIX)
  SGEMMONCOPYOBJ =  sgemm_oncopy$(TSUFFIX).$(SUFFIX)
  SGEMMOTCOPYOBJ =  sgemm_otcopy$(TSUFFIX).$(SUFFIX)
  DGEMMKERNEL    =  gemm_kernel_4x4_sse3.S
@@@ -21,11 -21,11 +21,11 @@@ DGEMMITCOPYOBJ =  dgemm_itcopy$(TSUFFIX
  DGEMMONCOPYOBJ =  dgemm_oncopy$(TSUFFIX).$(SUFFIX)
  DGEMMOTCOPYOBJ =  dgemm_otcopy$(TSUFFIX).$(SUFFIX)
  
- CGEMMKERNEL    =  zgemm_kernel_2x4_nehalem.S
- CGEMMINCOPY    =  zgemm_ncopy_2.S
- CGEMMITCOPY    =  zgemm_tcopy_2.S
- CGEMMONCOPY    =  ../generic/zgemm_ncopy_4.c
- CGEMMOTCOPY    =  ../generic/zgemm_tcopy_4.c
+ CGEMMKERNEL    =  cgemm_kernel_8x2_sandy.S
+ CGEMMINCOPY    =  ../generic/zgemm_ncopy_8.c
+ CGEMMITCOPY    =  ../generic/zgemm_tcopy_8.c
+ CGEMMONCOPY    =  ../generic/zgemm_ncopy_2.c
+ CGEMMOTCOPY    =  ../generic/zgemm_tcopy_2.c
  CGEMMINCOPYOBJ =  cgemm_incopy$(TSUFFIX).$(SUFFIX)
  CGEMMITCOPYOBJ =  cgemm_itcopy$(TSUFFIX).$(SUFFIX)
  CGEMMONCOPYOBJ =  cgemm_oncopy$(TSUFFIX).$(SUFFIX)
@@@ -33,12 -33,12 +33,12 @@@ CGEMMOTCOPYOBJ =  cgemm_otcopy$(TSUFFIX
  
  
  ZGEMMKERNEL    =  zgemm_kernel_4x4_sandy.S
 -ZGEMMINCOPY    =  
 -ZGEMMITCOPY    = 
 +ZGEMMINCOPY    =
 +ZGEMMITCOPY    =
  ZGEMMONCOPY    =  ../generic/zgemm_ncopy_4.c
  ZGEMMOTCOPY    =  ../generic/zgemm_tcopy_4.c
 -ZGEMMINCOPYOBJ =  
 -ZGEMMITCOPYOBJ =  
 +ZGEMMINCOPYOBJ =
 +ZGEMMITCOPYOBJ =
  ZGEMMONCOPYOBJ =  zgemm_oncopy$(TSUFFIX).$(SUFFIX)
  ZGEMMOTCOPYOBJ =  zgemm_otcopy$(TSUFFIX).$(SUFFIX)
  
diff --combined param.h
+++ b/param.h
@@@ -13,19 -13,19 +13,19 @@@ met
        notice, this list of conditions and the following disclaimer in
        the documentation and/or other materials provided with the
        distribution.
 -   3. Neither the name of the ISCAS nor the names of its contributors may 
 -      be used to endorse or promote products derived from this software 
 +   3. Neither the name of the ISCAS nor the names of its contributors may
 +      be used to endorse or promote products derived from this software
        without specific prior written permission.
  
 -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
 -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
 -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
 -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
 -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
 -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
 -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
 -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 
 +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  
  **********************************************************************************/
  #define DGEMM_DEFAULT_P 224
  #define QGEMM_DEFAULT_P 112
  #define CGEMM_DEFAULT_P 224
 -#define ZGEMM_DEFAULT_P 112 
 +#define ZGEMM_DEFAULT_P 112
  #define XGEMM_DEFAULT_P  56
  
  #define SGEMM_DEFAULT_Q 224
  #endif
  #define QGEMM_DEFAULT_P 112
  #define CGEMM_DEFAULT_P 224
 -#define ZGEMM_DEFAULT_P 112 
 +#define ZGEMM_DEFAULT_P 112
  #define XGEMM_DEFAULT_P  56
  
  #if defined(ARCH_X86_64)
  #else
  #define SGEMM_DEFAULT_P 448
  #define DGEMM_DEFAULT_P 480
 -#define ZGEMM_DEFAULT_P 112 
 +#define ZGEMM_DEFAULT_P 112
  #define CGEMM_DEFAULT_P 224
  #endif
  #define QGEMM_DEFAULT_P 112
  #define SGEMM_DEFAULT_UNROLL_M 16
  #define DGEMM_DEFAULT_UNROLL_M 8
  #define QGEMM_DEFAULT_UNROLL_M 2
- #define CGEMM_DEFAULT_UNROLL_M 2
+ #define CGEMM_DEFAULT_UNROLL_M 8
  #define ZGEMM_DEFAULT_UNROLL_M 4
  #define XGEMM_DEFAULT_UNROLL_M 1
  
  #define SGEMM_DEFAULT_UNROLL_N 4
  #define DGEMM_DEFAULT_UNROLL_N 4
  #define QGEMM_DEFAULT_UNROLL_N 2
- #define CGEMM_DEFAULT_UNROLL_N 4
+ #define CGEMM_DEFAULT_UNROLL_N 2
  #define ZGEMM_DEFAULT_UNROLL_N 4
  #define XGEMM_DEFAULT_UNROLL_N 1
  #endif
  #define QGEMM_DEFAULT_P 504
  #define QGEMM_DEFAULT_R qgemm_r
  
- #define CGEMM_DEFAULT_P 128
+ #define CGEMM_DEFAULT_P 384
  //#define CGEMM_DEFAULT_R cgemm_r
  #define CGEMM_DEFAULT_R 1024
  
  #define SGEMM_DEFAULT_Q 384
  #define DGEMM_DEFAULT_Q 256
  #define QGEMM_DEFAULT_Q 128
- #define CGEMM_DEFAULT_Q 256
+ #define CGEMM_DEFAULT_Q 192
  #define ZGEMM_DEFAULT_Q 192
  #define XGEMM_DEFAULT_Q 128
  
  #define SGEMM_DEFAULT_Q 256
  #define DGEMM_DEFAULT_Q 256
  #define QGEMM_DEFAULT_Q 128
 -#define CGEMM_DEFAULT_Q 256 
 +#define CGEMM_DEFAULT_Q 256
  #define ZGEMM_DEFAULT_Q 192
  #define XGEMM_DEFAULT_Q 128
  
  #else
  #define DGEMM_DEFAULT_Q 256
  #endif
 -#define CGEMM_DEFAULT_Q 192 
 +#define CGEMM_DEFAULT_Q 192
  #define ZGEMM_DEFAULT_Q 128
  
  #define SGEMM_DEFAULT_R sgemm_r
  #define SYMV_P        16
  #endif
  
 -#ifdef LOONGSON3A 
 +#ifdef LOONGSON3A
  ////Copy from SICORTEX
  #define SNUMOPT               2
  #define DNUMOPT               2
  #define ZGEMM_DEFAULT_UNROLL_N  2
  
  #define SGEMM_DEFAULT_P       64
 -#define DGEMM_DEFAULT_P       44 
 +#define DGEMM_DEFAULT_P       44
  #define CGEMM_DEFAULT_P 64
  #define ZGEMM_DEFAULT_P 32
  
  #define CGEMM_DEFAULT_Q 128
  #define ZGEMM_DEFAULT_Q 80
  
 -#define SGEMM_DEFAULT_R 640 
 -#define DGEMM_DEFAULT_R dgemm_r 
 +#define SGEMM_DEFAULT_R 640
 +#define DGEMM_DEFAULT_R dgemm_r
  #define CGEMM_DEFAULT_R 640
  #define ZGEMM_DEFAULT_R 640
  
  #define ZGEMM_DEFAULT_Q 64
  
  #define SGEMM_DEFAULT_R 512
 -#define DGEMM_DEFAULT_R 512 
 +#define DGEMM_DEFAULT_R 512
  #define CGEMM_DEFAULT_R 512
  #define ZGEMM_DEFAULT_R 512