From 5f85e9d9dca301a2360932be496d4790929f4cf9 Mon Sep 17 00:00:00 2001 From: David Abdurachmanov <david.abdurachmanov@sifive.com> Date: Mon, 4 May 2020 08:28:35 +0300 Subject: [PATCH] Add the latest RISC-V development Signed-off-by: David Abdurachmanov <david.abdurachmanov@sifive.com> --- openblas.spec | 15 +- riscv64.patch | 4657 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 4671 insertions(+), 1 deletion(-) create mode 100644 riscv64.patch diff --git a/openblas.spec b/openblas.spec index dfe496d..fcbf2fb 100644 --- a/openblas.spec +++ b/openblas.spec @@ -32,6 +32,9 @@ Patch3: openblas-0.3.7-tests.patch # Fix C++ compatibility (BZ #1820131) Patch4: https://github.com/xianyi/OpenBLAS/commit/ee2e758278b5d82b7242f505ea694f082ef65879.patch +# RISC-V 64-bit support (generated from risc-v upstream branch) +Patch10: riscv64.patch + BuildRequires: gcc BuildRequires: gcc-c++ BuildRequires: gcc-gfortran @@ -250,6 +253,10 @@ cd OpenBLAS-%{version} %patch3 -p1 -b .tests %patch4 -p1 -b .cplusplus +%ifarch riscv64 +%patch10 -p1 -b .riscv64 +%endif + # Fix source permissions find -name \*.f -exec chmod 644 {} \; @@ -391,7 +398,7 @@ TARGET="TARGET=ARMV8 DYNAMIC_ARCH=1 DYNAMIC_OLDER=1" TARGET="TARGET=ZARCH_GENERIC DYNAMIC_ARCH=1 DYNAMIC_OLDER=1" %endif %ifarch riscv64 -TARGET="TARGET=RISCV64 DYNAMIC_ARCH=0" +TARGET="TARGET=RISCV64_GENERIC DYNAMIC_ARCH=0" %endif %if 0%{?rhel} == 5 @@ -457,6 +464,9 @@ suffix="" %ifarch armv7hl suffix="_armv7" %endif +%ifarch riscv64 +suffix="_riscv64_generic" +%endif slibname=`basename %{buildroot}%{_libdir}/libopenblas${suffix}-*.so .so` mv %{buildroot}%{_libdir}/${slibname}.a %{buildroot}%{_libdir}/lib%{name}.a if [[ "$suffix" != "" ]]; then @@ -675,6 +685,9 @@ rm -rf %{buildroot}%{_libdir}/pkgconfig %endif %changelog +* Mon May 04 2020 David Abdurachmanov <david.abdurachmanvo@sifive.com> - 0.3.9-2.0.riscv64 +- Enable RISC-V 64-bit (riscv64) support + * Thu Apr 02 2020 Susi Lehtola <jussilehtola@fedoraproject.org> - 0.3.9-2 - Patch for BZ #1820131. diff --git a/riscv64.patch b/riscv64.patch new file mode 100644 index 0000000..ef8c97b --- /dev/null +++ b/riscv64.patch @@ -0,0 +1,4657 @@ +diff --git a/Makefile.riscv64 b/Makefile.riscv64 +new file mode 100644 +index 00000000..e69de29b +diff --git a/Makefile.system b/Makefile.system +index a928b6e2..8c725137 100644 +--- a/Makefile.system ++++ b/Makefile.system +@@ -712,7 +712,9 @@ endif + ifndef BINARY_DEFINED + ifneq ($(OSNAME), AIX) + ifdef BINARY64 ++ifneq ($(ARCH), riscv64) + CCOMMON_OPT += -m64 ++endif + else + CCOMMON_OPT += -m32 + endif +@@ -813,8 +815,10 @@ endif + else + ifdef BINARY64 + ifneq ($(OSNAME), AIX) ++ifneq ($(ARCH), riscv64) + FCOMMON_OPT += -m64 + endif ++endif + ifdef INTERFACE64 + ifneq ($(INTERFACE64), 0) + FCOMMON_OPT += -fdefault-integer-8 +diff --git a/TargetList.txt b/TargetList.txt +index 6a57bf1a..3b018e17 100644 +--- a/TargetList.txt ++++ b/TargetList.txt +@@ -97,3 +97,6 @@ TSV110 + ZARCH_GENERIC + Z13 + Z14 ++ ++10.RISC-V 64: ++RISCV64_GENERIC +diff --git a/c_check b/c_check +index c7899c84..b645d1b5 100644 +--- a/c_check ++++ b/c_check +@@ -91,6 +91,7 @@ $architecture = ia64 if ($data =~ /ARCH_IA64/); + $architecture = arm if ($data =~ /ARCH_ARM/); + $architecture = arm64 if ($data =~ /ARCH_ARM64/); + $architecture = zarch if ($data =~ /ARCH_ZARCH/); ++$architecture = riscv64 if ($data =~ /ARCH_RISCV64/); + + $defined = 0; + +@@ -135,6 +136,11 @@ if (($architecture eq "x86") && ($os ne Darwin) && ($os ne SunOS)) { + $binary =32; + } + ++if ($architecture eq "riscv64") { ++ $defined = 1; ++ $binary = 64; ++} ++ + if ($compiler eq "PGI") { + $compiler_name .= " -tp p7" if ($binary eq "32"); + $compiler_name .= " -tp p7-64" if ($binary eq "64"); +diff --git a/common.h b/common.h +index a9fe8d91..7b3619cd 100644 +--- a/common.h ++++ b/common.h +@@ -425,6 +425,11 @@ please https://github.com/xianyi/OpenBLAS/issues/246 + #include "common_mips.h" + #endif + ++ ++#ifdef ARCH_RISCV64 ++#include "common_riscv64.h" ++#endif ++ + #ifdef ARCH_MIPS64 + #include "common_mips64.h" + #endif +diff --git a/common_riscv64.h b/common_riscv64.h +new file mode 100644 +index 00000000..fe4e0a6d +--- /dev/null ++++ b/common_riscv64.h +@@ -0,0 +1,93 @@ ++/***************************************************************************** ++Copyright (c) 2011-2014, The OpenBLAS Project ++All rights reserved. ++ ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++ ++ 1. Redistributions of source code must retain the above copyright ++ notice, this list of conditions and the following disclaimer. ++ ++ 2. Redistributions in binary form must reproduce the above copyright ++ 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 OpenBLAS project 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 ++USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++**********************************************************************************/ ++ ++/*********************************************************************/ ++/* Copyright 2009, 2010 The University of Texas at Austin. */ ++/* All rights reserved. */ ++/* */ ++/* Redistribution and use in source and binary forms, with or */ ++/* without modification, are permitted provided that the following */ ++/* conditions are met: */ ++/* */ ++/* 1. Redistributions of source code must retain the above */ ++/* copyright notice, this list of conditions and the following */ ++/* disclaimer. */ ++/* */ ++/* 2. Redistributions in binary form must reproduce the above */ ++/* copyright notice, this list of conditions and the following */ ++/* disclaimer in the documentation and/or other materials */ ++/* provided with the distribution. */ ++/* */ ++/* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF TEXAS AT */ ++/* AUSTIN ``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 UNIVERSITY OF TEXAS AT */ ++/* AUSTIN 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. */ ++/* */ ++/* The views and conclusions contained in the software and */ ++/* documentation are those of the authors and should not be */ ++/* interpreted as representing official policies, either expressed */ ++/* or implied, of The University of Texas at Austin. */ ++/*********************************************************************/ ++ ++#ifndef COMMON_RISCV64 ++#define COMMON_RISCV64 ++ ++#define MB __sync_synchronize() ++#define WMB __sync_synchronize() ++ ++#define INLINE inline ++ ++#ifndef ASSEMBLER ++ ++ ++static inline int blas_quickdivide(blasint x, blasint y){ ++ return x / y; ++} ++ ++#endif ++ ++ ++ ++#define BUFFER_SIZE ( 32 << 20) ++#define SEEK_ADDRESS ++ ++#endif +diff --git a/cpuid_riscv64.c b/cpuid_riscv64.c +new file mode 100644 +index 00000000..129ed11b +--- /dev/null ++++ b/cpuid_riscv64.c +@@ -0,0 +1,111 @@ ++/***************************************************************************** ++Copyright (c) 2011-2014, The OpenBLAS Project ++All rights reserved. ++ ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++ ++ 1. Redistributions of source code must retain the above copyright ++ notice, this list of conditions and the following disclaimer. ++ ++ 2. Redistributions in binary form must reproduce the above copyright ++ 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 OpenBLAS project 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 ++USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ ++**********************************************************************************/ ++ ++ ++/*********************************************************************/ ++/* Copyright 2009, 2010 The University of Texas at Austin. */ ++/* All rights reserved. */ ++/* */ ++/* Redistribution and use in source and binary forms, with or */ ++/* without modification, are permitted provided that the following */ ++/* conditions are met: */ ++/* */ ++/* 1. Redistributions of source code must retain the above */ ++/* copyright notice, this list of conditions and the following */ ++/* disclaimer. */ ++/* */ ++/* 2. Redistributions in binary form must reproduce the above */ ++/* copyright notice, this list of conditions and the following */ ++/* disclaimer in the documentation and/or other materials */ ++/* provided with the distribution. */ ++/* */ ++/* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF TEXAS AT */ ++/* AUSTIN ``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 UNIVERSITY OF TEXAS AT */ ++/* AUSTIN 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. */ ++/* */ ++/* The views and conclusions contained in the software and */ ++/* documentation are those of the authors and should not be */ ++/* interpreted as representing official policies, either expressed */ ++/* or implied, of The University of Texas at Austin. */ ++/*********************************************************************/ ++ ++#define CPU_UNKNOWN 0 ++ ++static char *cpuname[] = { ++ "UNKOWN", ++}; ++ ++int detect(void){ ++ return CPU_UNKNOWN; ++} ++ ++char *get_corename(void){ ++ return cpuname[detect()]; ++} ++ ++void get_architecture(void){ ++ printf("RISCV64"); ++} ++ ++void get_subarchitecture(void){ ++} ++ ++void get_subdirname(void){ ++ printf("riscv64"); ++} ++ ++void get_cpuconfig(void){ ++ printf("#define UNKNOWN\n"); ++ printf("#define L1_DATA_SIZE 65536\n"); ++ printf("#define L1_DATA_LINESIZE 32\n"); ++ printf("#define L2_SIZE 512488\n"); ++ printf("#define L2_LINESIZE 32\n"); ++ printf("#define DTB_DEFAULT_ENTRIES 64\n"); ++ printf("#define DTB_SIZE 4096\n"); ++ printf("#define L2_ASSOCIATIVE 4\n"); ++} ++ ++void get_libname(void){ ++ printf("riscv64\n"); ++} +diff --git a/ctest.c b/ctest.c +index 5e869b90..b0102745 100644 +--- a/ctest.c ++++ b/ctest.c +@@ -153,3 +153,7 @@ ARCH_ARM + ARCH_ARM64 + #endif + ++#if defined(__riscv) ++ARCH_RISCV64 ++#endif ++ +diff --git a/getarch.c b/getarch.c +index d29f6369..58706c45 100644 +--- a/getarch.c ++++ b/getarch.c +@@ -650,6 +650,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + #define CORENAME "POWER9" + #endif + ++ + #ifdef FORCE_PPCG4 + #define FORCE + #define ARCHITECTURE "POWER" +@@ -905,6 +906,20 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + #else + #endif + ++#ifdef FORCE_RISCV64_GENERIC ++#define FORCE ++#define ARCHITECTURE "RISCV64" ++#define SUBARCHITECTURE "RISCV64_GENERIC" ++#define SUBDIRNAME "riscv64" ++#define ARCHCONFIG "-DRISCV64_GENERIC " \ ++ "-DL1_DATA_SIZE=32768 -DL1_DATA_LINESIZE=32 " \ ++ "-DL2_SIZE=1048576 -DL2_LINESIZE=32 " \ ++ "-DDTB_DEFAULT_ENTRIES=128 -DDTB_SIZE=4096 -DL2_ASSOCIATIVE=4 " ++#define LIBNAME "riscv64_generic" ++#define CORENAME "RISCV64_GENERIC" ++#else ++#endif ++ + #ifdef FORCE_CORTEXA15 + #define FORCE + #define ARCHITECTURE "ARM" +@@ -1194,6 +1209,10 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + #define OPENBLAS_SUPPORTED + #endif + ++#ifdef __riscv ++#include "cpuid_riscv64.c" ++#endif ++ + #ifdef __arm__ + #include "cpuid_arm.c" + #define OPENBLAS_SUPPORTED +diff --git a/kernel/Makefile.L3 b/kernel/Makefile.L3 +index 6d96abb2..3ed782df 100644 +--- a/kernel/Makefile.L3 ++++ b/kernel/Makefile.L3 +@@ -21,6 +21,10 @@ ifeq ($(ARCH), arm64) + USE_TRMM = 1 + endif + ++ifeq ($(ARCH), riscv64) ++USE_TRMM = 1 ++endif ++ + ifeq ($(TARGET), LOONGSON3B) + USE_TRMM = 1 + endif +diff --git a/kernel/riscv64/KERNEL b/kernel/riscv64/KERNEL +new file mode 100644 +index 00000000..68d68b5f +--- /dev/null ++++ b/kernel/riscv64/KERNEL +@@ -0,0 +1,30 @@ ++ifndef SCABS_KERNEL ++SCABS_KERNEL = ../generic/cabs.c ++endif ++ ++ifndef DCABS_KERNEL ++DCABS_KERNEL = ../generic/cabs.c ++endif ++ ++ifndef QCABS_KERNEL ++QCABS_KERNEL = ../generic/cabs.c ++endif ++ ++ifndef LSAME_KERNEL ++LSAME_KERNEL = ../generic/lsame.c ++endif ++ ++ifndef SGEMM_BETA ++SGEMM_BETA = ../generic/gemm_beta.c ++endif ++ifndef DGEMM_BETA ++DGEMM_BETA = ../generic/gemm_beta.c ++endif ++ifndef CGEMM_BETA ++CGEMM_BETA = ../generic/zgemm_beta.c ++endif ++ifndef ZGEMM_BETA ++ZGEMM_BETA = ../generic/zgemm_beta.c ++endif ++ ++ +diff --git a/kernel/riscv64/KERNEL.RISCV64_GENERIC b/kernel/riscv64/KERNEL.RISCV64_GENERIC +new file mode 100644 +index 00000000..ea6a8cf2 +--- /dev/null ++++ b/kernel/riscv64/KERNEL.RISCV64_GENERIC +@@ -0,0 +1,164 @@ ++SAMAXKERNEL = ../riscv64/amax.c ++DAMAXKERNEL = ../riscv64/amax.c ++CAMAXKERNEL = ../riscv64/zamax.c ++ZAMAXKERNEL = ../riscv64/zamax.c ++ ++SAMINKERNEL = ../riscv64/amin.c ++DAMINKERNEL = ../riscv64/amin.c ++CAMINKERNEL = ../riscv64/zamin.c ++ZAMINKERNEL = ../riscv64/zamin.c ++ ++SMAXKERNEL = ../riscv64/max.c ++DMAXKERNEL = ../riscv64/max.c ++ ++SMINKERNEL = ../riscv64/min.c ++DMINKERNEL = ../riscv64/min.c ++ ++ISAMAXKERNEL = ../riscv64/iamax.c ++IDAMAXKERNEL = ../riscv64/iamax.c ++ICAMAXKERNEL = ../riscv64/izamax.c ++IZAMAXKERNEL = ../riscv64/izamax.c ++ ++ISAMINKERNEL = ../riscv64/iamin.c ++IDAMINKERNEL = ../riscv64/iamin.c ++ICAMINKERNEL = ../riscv64/izamin.c ++IZAMINKERNEL = ../riscv64/izamin.c ++ ++ISMAXKERNEL = ../riscv64/imax.c ++IDMAXKERNEL = ../riscv64/imax.c ++ ++ISMINKERNEL = ../riscv64/imin.c ++IDMINKERNEL = ../riscv64/imin.c ++ ++SASUMKERNEL = ../riscv64/asum.c ++DASUMKERNEL = ../riscv64/asum.c ++CASUMKERNEL = ../riscv64/zasum.c ++ZASUMKERNEL = ../riscv64/zasum.c ++ ++SSUMKERNEL = ../arm/sum.c ++DSUMKERNEL = ../arm/sum.c ++CSUMKERNEL = ../arm/zsum.c ++ZSUMKERNEL = ../arm/zsum.c ++ ++SAXPYKERNEL = ../riscv64/axpy.c ++DAXPYKERNEL = ../riscv64/axpy.c ++CAXPYKERNEL = ../riscv64/zaxpy.c ++ZAXPYKERNEL = ../riscv64/zaxpy.c ++ ++SCOPYKERNEL = ../riscv64/copy.c ++DCOPYKERNEL = ../riscv64/copy.c ++CCOPYKERNEL = ../riscv64/zcopy.c ++ZCOPYKERNEL = ../riscv64/zcopy.c ++ ++SDOTKERNEL = ../riscv64/dot.c ++DDOTKERNEL = ../riscv64/dot.c ++CDOTKERNEL = ../riscv64/zdot.c ++ZDOTKERNEL = ../riscv64/zdot.c ++ ++SNRM2KERNEL = ../riscv64/nrm2.c ++DNRM2KERNEL = ../riscv64/nrm2.c ++CNRM2KERNEL = ../riscv64/znrm2.c ++ZNRM2KERNEL = ../riscv64/znrm2.c ++ ++SROTKERNEL = ../riscv64/rot.c ++DROTKERNEL = ../riscv64/rot.c ++CROTKERNEL = ../riscv64/zrot.c ++ZROTKERNEL = ../riscv64/zrot.c ++ ++SSCALKERNEL = ../riscv64/scal.c ++DSCALKERNEL = ../riscv64/scal.c ++CSCALKERNEL = ../riscv64/zscal.c ++ZSCALKERNEL = ../riscv64/zscal.c ++ ++SSWAPKERNEL = ../riscv64/swap.c ++DSWAPKERNEL = ../riscv64/swap.c ++CSWAPKERNEL = ../riscv64/zswap.c ++ZSWAPKERNEL = ../riscv64/zswap.c ++ ++SGEMVNKERNEL = ../riscv64/gemv_n.c ++DGEMVNKERNEL = ../riscv64/gemv_n.c ++CGEMVNKERNEL = ../riscv64/zgemv_n.c ++ZGEMVNKERNEL = ../riscv64/zgemv_n.c ++ ++SGEMVTKERNEL = ../riscv64/gemv_t.c ++DGEMVTKERNEL = ../riscv64/gemv_t.c ++CGEMVTKERNEL = ../riscv64/zgemv_t.c ++ZGEMVTKERNEL = ../riscv64/zgemv_t.c ++ ++STRMMKERNEL = ../generic/trmmkernel_2x2.c ++DTRMMKERNEL = ../generic/trmmkernel_2x2.c ++CTRMMKERNEL = ../generic/ztrmmkernel_2x2.c ++ZTRMMKERNEL = ../generic/ztrmmkernel_2x2.c ++ ++SGEMMKERNEL = ../generic/gemmkernel_2x2.c ++SGEMMONCOPY = ../generic/gemm_ncopy_2.c ++SGEMMOTCOPY = ../generic/gemm_tcopy_2.c ++SGEMMONCOPYOBJ = sgemm_oncopy.o ++SGEMMOTCOPYOBJ = sgemm_otcopy.o ++ ++DGEMMKERNEL = ../generic/gemmkernel_2x2.c ++DGEMMONCOPY = ../generic/gemm_ncopy_2.c ++DGEMMOTCOPY = ../generic/gemm_tcopy_2.c ++DGEMMONCOPYOBJ = dgemm_oncopy.o ++DGEMMOTCOPYOBJ = dgemm_otcopy.o ++ ++CGEMMKERNEL = ../generic/zgemmkernel_2x2.c ++CGEMMONCOPY = ../generic/zgemm_ncopy_2.c ++CGEMMOTCOPY = ../generic/zgemm_tcopy_2.c ++CGEMMONCOPYOBJ = cgemm_oncopy.o ++CGEMMOTCOPYOBJ = cgemm_otcopy.o ++ ++ZGEMMKERNEL = ../generic/zgemmkernel_2x2.c ++ZGEMMONCOPY = ../generic/zgemm_ncopy_2.c ++ZGEMMOTCOPY = ../generic/zgemm_tcopy_2.c ++ZGEMMONCOPYOBJ = zgemm_oncopy.o ++ZGEMMOTCOPYOBJ = zgemm_otcopy.o ++ ++STRSMKERNEL_LN = ../generic/trsm_kernel_LN.c ++STRSMKERNEL_LT = ../generic/trsm_kernel_LT.c ++STRSMKERNEL_RN = ../generic/trsm_kernel_RN.c ++STRSMKERNEL_RT = ../generic/trsm_kernel_RT.c ++ ++DTRSMKERNEL_LN = ../generic/trsm_kernel_LN.c ++DTRSMKERNEL_LT = ../generic/trsm_kernel_LT.c ++DTRSMKERNEL_RN = ../generic/trsm_kernel_RN.c ++DTRSMKERNEL_RT = ../generic/trsm_kernel_RT.c ++ ++CTRSMKERNEL_LN = ../generic/trsm_kernel_LN.c ++CTRSMKERNEL_LT = ../generic/trsm_kernel_LT.c ++CTRSMKERNEL_RN = ../generic/trsm_kernel_RN.c ++CTRSMKERNEL_RT = ../generic/trsm_kernel_RT.c ++ ++ZTRSMKERNEL_LN = ../generic/trsm_kernel_LN.c ++ZTRSMKERNEL_LT = ../generic/trsm_kernel_LT.c ++ZTRSMKERNEL_RN = ../generic/trsm_kernel_RN.c ++ZTRSMKERNEL_RT = ../generic/trsm_kernel_RT.c ++ ++SSYMV_U_KERNEL = ../generic/symv_k.c ++SSYMV_L_KERNEL = ../generic/symv_k.c ++DSYMV_U_KERNEL = ../generic/symv_k.c ++DSYMV_L_KERNEL = ../generic/symv_k.c ++CSYMV_U_KERNEL = ../generic/zsymv_k.c ++CSYMV_L_KERNEL = ../generic/zsymv_k.c ++ZSYMV_U_KERNEL = ../generic/zsymv_k.c ++ZSYMV_L_KERNEL = ../generic/zsymv_k.c ++ ++ ++LSAME_KERNEL = ../generic/lsame.c ++ ++SCABS_KERNEL = ../generic/cabs.c ++DCABS_KERNEL = ../generic/cabs.c ++QCABS_KERNEL = ../generic/cabs.c ++ ++ifndef SGEMM_BETA ++SGEMM_BETA = ../generic/gemm_beta.c ++endif ++ifndef DGEMM_BETA ++DGEMM_BETA = ../generic/gemm_beta.c ++endif ++ifndef CGEMM_BETA ++CGEMM_BETA = ../generic/zgemm_beta.c ++endif ++ifndef ZGEMM_BETA ++ZGEMM_BETA = ../generic/zgemm_beta.c ++endif +diff --git a/kernel/riscv64/amax.c b/kernel/riscv64/amax.c +new file mode 100644 +index 00000000..792e68bd +--- /dev/null ++++ b/kernel/riscv64/amax.c +@@ -0,0 +1,75 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++/************************************************************************************** ++* 2013/09/14 Saar ++* BLASTEST float : OK ++* BLASTEST double : OK ++* CTEST : NoTest ++* TEST : NoTest ++* ++**************************************************************************************/ ++ ++#include "common.h" ++#include <math.h> ++ ++#if defined(DOUBLE) ++ ++#define ABS fabs ++ ++#else ++ ++#define ABS fabsf ++ ++#endif ++ ++ ++FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x) ++{ ++ BLASLONG i=0; ++ BLASLONG ix=0; ++ FLOAT maxf=0.0; ++ ++ if (n <= 0 || inc_x <= 0) return(maxf); ++ ++ maxf=ABS(x[0]); ++ ix += inc_x; ++ i++; ++ ++ while(i < n) ++ { ++ if( ABS(x[ix]) > maxf ) ++ { ++ maxf = ABS(x[ix]); ++ } ++ ix += inc_x; ++ i++; ++ } ++ return(maxf); ++} ++ ++ +diff --git a/kernel/riscv64/amin.c b/kernel/riscv64/amin.c +new file mode 100644 +index 00000000..78495a8e +--- /dev/null ++++ b/kernel/riscv64/amin.c +@@ -0,0 +1,75 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++/************************************************************************************** ++* 2013/09/14 Saar ++* BLASTEST float : OK ++* BLASTEST double : OK ++* CTEST : NoTest ++* TEST : NoTest ++* ++**************************************************************************************/ ++ ++#include "common.h" ++#include <math.h> ++ ++#if defined(DOUBLE) ++ ++#define ABS fabs ++ ++#else ++ ++#define ABS fabsf ++ ++#endif ++ ++ ++FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x) ++{ ++ BLASLONG i=0; ++ BLASLONG ix=0; ++ FLOAT minf=0.0; ++ ++ if (n <= 0 || inc_x <= 0) return(minf); ++ ++ minf=ABS(x[0]); ++ ix += inc_x; ++ i++; ++ ++ while(i < n) ++ { ++ if( ABS(x[ix]) < minf ) ++ { ++ minf = ABS(x[ix]); ++ } ++ ix += inc_x; ++ i++; ++ } ++ return(minf); ++} ++ ++ +diff --git a/kernel/riscv64/asum.c b/kernel/riscv64/asum.c +new file mode 100644 +index 00000000..b284ae3f +--- /dev/null ++++ b/kernel/riscv64/asum.c +@@ -0,0 +1,67 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++/************************************************************************************** ++* 2013/09/14 Saar ++* BLASTEST float : OK ++* BLASTEST double : OK ++* CTEST : OK ++* TEST : OK ++* ++**************************************************************************************/ ++ ++ ++#include "common.h" ++#include <math.h> ++ ++#if defined(DOUBLE) ++ ++#define ABS fabs ++ ++#else ++ ++#define ABS fabsf ++ ++#endif ++ ++ ++FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x) ++{ ++ BLASLONG i=0; ++ FLOAT sumf = 0.0; ++ if (n <= 0 || inc_x <= 0) return(sumf); ++ ++ n *= inc_x; ++ while(i < n) ++ { ++ sumf += ABS(x[i]); ++ i += inc_x; ++ } ++ return(sumf); ++} ++ ++ +diff --git a/kernel/riscv64/axpby.c b/kernel/riscv64/axpby.c +new file mode 100644 +index 00000000..278747f7 +--- /dev/null ++++ b/kernel/riscv64/axpby.c +@@ -0,0 +1,96 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++ ++#include "common.h" ++ ++int CNAME(BLASLONG n, FLOAT alpha, FLOAT *x, BLASLONG inc_x, FLOAT beta, FLOAT *y, BLASLONG inc_y) ++{ ++ BLASLONG i=0; ++ BLASLONG ix,iy; ++ ++ if ( n < 0 ) return(0); ++ ++ ix = 0; ++ iy = 0; ++ ++ if ( beta == 0.0 ) ++ { ++ ++ if ( alpha == 0.0 ) ++ { ++ while(i < n) ++ { ++ y[iy] = 0.0 ; ++ iy += inc_y ; ++ i++ ; ++ } ++ } ++ else ++ { ++ while(i < n) ++ { ++ y[iy] = alpha * x[ix] ; ++ ix += inc_x ; ++ iy += inc_y ; ++ i++ ; ++ } ++ ++ ++ } ++ ++ } ++ else ++ { ++ ++ if ( alpha == 0.0 ) ++ { ++ while(i < n) ++ { ++ y[iy] = beta * y[iy] ; ++ iy += inc_y ; ++ i++ ; ++ } ++ } ++ else ++ { ++ while(i < n) ++ { ++ y[iy] = alpha * x[ix] + beta * y[iy] ; ++ ix += inc_x ; ++ iy += inc_y ; ++ i++ ; ++ } ++ } ++ ++ } ++ ++ return(0); ++ ++} ++ ++ +diff --git a/kernel/riscv64/axpy.c b/kernel/riscv64/axpy.c +new file mode 100644 +index 00000000..fb1094dd +--- /dev/null ++++ b/kernel/riscv64/axpy.c +@@ -0,0 +1,64 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++/************************************************************************************** ++* 2013/09/14 Saar ++* BLASTEST float : OK ++* BLASTEST double : OK ++* CTEST : OK ++* TEST : OK ++* ++**************************************************************************************/ ++ ++ ++#include "common.h" ++ ++int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y, FLOAT *dummy, BLASLONG dummy2) ++{ ++ BLASLONG i=0; ++ BLASLONG ix,iy; ++ ++ if ( n < 0 ) return(0); ++ if ( da == 0.0 ) return(0); ++ ++ ix = 0; ++ iy = 0; ++ ++ while(i < n) ++ { ++ ++ y[iy] += da * x[ix] ; ++ ix += inc_x ; ++ iy += inc_y ; ++ i++ ; ++ ++ } ++ return(0); ++ ++} ++ ++ +diff --git a/kernel/riscv64/copy.c b/kernel/riscv64/copy.c +new file mode 100644 +index 00000000..7b4f04f3 +--- /dev/null ++++ b/kernel/riscv64/copy.c +@@ -0,0 +1,59 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++/************************************************************************************** ++* 2013/09/14 Saar ++* BLASTEST float : OK ++* BLASTEST double : OK ++* CTEST : OK ++* TEST : OK ++* ++**************************************************************************************/ ++ ++#include "common.h" ++ ++int CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y) ++{ ++ BLASLONG i=0; ++ BLASLONG ix=0,iy=0; ++ ++ if ( n < 0 ) return(0); ++ ++ while(i < n) ++ { ++ ++ y[iy] = x[ix] ; ++ ix += inc_x ; ++ iy += inc_y ; ++ i++ ; ++ ++ } ++ return(0); ++ ++} ++ ++ +diff --git a/kernel/riscv64/dot.c b/kernel/riscv64/dot.c +new file mode 100644 +index 00000000..46a84ad1 +--- /dev/null ++++ b/kernel/riscv64/dot.c +@@ -0,0 +1,64 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++/************************************************************************************** ++* 2013/09/14 Saar ++* BLASTEST float : OK ++* BLASTEST double : OK ++* CTEST : OK ++* TEST : OK ++* ++**************************************************************************************/ ++ ++#include "common.h" ++ ++#if defined(DSDOT) ++double CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y) ++#else ++FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y) ++#endif ++{ ++ BLASLONG i=0; ++ BLASLONG ix=0,iy=0; ++ double dot = 0.0 ; ++ ++ if ( n < 0 ) return(dot); ++ ++ while(i < n) ++ { ++ ++ dot += y[iy] * x[ix] ; ++ ix += inc_x ; ++ iy += inc_y ; ++ i++ ; ++ ++ } ++ return(dot); ++ ++} ++ ++ +diff --git a/kernel/riscv64/gemv_n.c b/kernel/riscv64/gemv_n.c +new file mode 100644 +index 00000000..ef61b245 +--- /dev/null ++++ b/kernel/riscv64/gemv_n.c +@@ -0,0 +1,67 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++ ++/************************************************************************************** ++ * * 2013/09/14 Saar ++ * * BLASTEST float : OK ++ * * BLASTEST double : OK ++ * CTEST : OK ++ * TEST : OK ++ * * ++ * **************************************************************************************/ ++ ++ ++#include "common.h" ++ ++int CNAME(BLASLONG m, BLASLONG n, BLASLONG dummy1, FLOAT alpha, FLOAT *a, BLASLONG lda, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y, FLOAT *buffer) ++{ ++ BLASLONG i; ++ BLASLONG ix,iy; ++ BLASLONG j; ++ FLOAT *a_ptr; ++ FLOAT temp; ++ ++ ix = 0; ++ a_ptr = a; ++ ++ for (j=0; j<n; j++) ++ { ++ temp = alpha * x[ix]; ++ iy = 0; ++ for (i=0; i<m; i++) ++ { ++ y[iy] += temp * a_ptr[i]; ++ iy += inc_y; ++ } ++ a_ptr += lda; ++ ix += inc_x; ++ } ++ return(0); ++} ++ ++ +diff --git a/kernel/riscv64/gemv_t.c b/kernel/riscv64/gemv_t.c +new file mode 100644 +index 00000000..169047b7 +--- /dev/null ++++ b/kernel/riscv64/gemv_t.c +@@ -0,0 +1,68 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++/************************************************************************************** ++ * * 2013/09/14 Saar ++ * * BLASTEST float : OK ++ * * BLASTEST double : OK ++ * CTEST : OK ++ * TEST : OK ++ * * ++ * **************************************************************************************/ ++ ++ ++#include "common.h" ++ ++int CNAME(BLASLONG m, BLASLONG n, BLASLONG dummy1, FLOAT alpha, FLOAT *a, BLASLONG lda, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y, FLOAT *buffer) ++{ ++ BLASLONG i; ++ BLASLONG ix,iy; ++ BLASLONG j; ++ FLOAT *a_ptr; ++ FLOAT temp; ++ ++ iy = 0; ++ a_ptr = a; ++ ++ for (j=0; j<n; j++) ++ { ++ temp = 0.0; ++ ix = 0; ++ for (i=0; i<m; i++) ++ { ++ temp += a_ptr[i] * x[ix]; ++ ix += inc_x; ++ } ++ y[iy] += alpha * temp; ++ iy += inc_y; ++ a_ptr += lda; ++ } ++ return(0); ++ ++} ++ ++ +diff --git a/kernel/riscv64/iamax.c b/kernel/riscv64/iamax.c +new file mode 100644 +index 00000000..8c016ce4 +--- /dev/null ++++ b/kernel/riscv64/iamax.c +@@ -0,0 +1,77 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++/************************************************************************************** ++* 2013/09/14 Saar ++* BLASTEST float : NoTest ++* BLASTEST double : NoTest ++* CTEST : OK ++* TEST : OK ++* ++**************************************************************************************/ ++ ++#include "common.h" ++#include <math.h> ++ ++#if defined(DOUBLE) ++ ++#define ABS fabs ++ ++#else ++ ++#define ABS fabsf ++ ++#endif ++ ++ ++BLASLONG CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x) ++{ ++ BLASLONG i=0; ++ BLASLONG ix=0; ++ FLOAT maxf=0.0; ++ BLASLONG max=0; ++ ++ if (n <= 0 || inc_x <= 0) return(max); ++ ++ maxf=ABS(x[0]); ++ ix += inc_x; ++ i++; ++ ++ while(i < n) ++ { ++ if( ABS(x[ix]) > maxf ) ++ { ++ max = i; ++ maxf = ABS(x[ix]); ++ } ++ ix += inc_x; ++ i++; ++ } ++ return(max+1); ++} ++ ++ +diff --git a/kernel/riscv64/iamin.c b/kernel/riscv64/iamin.c +new file mode 100644 +index 00000000..155292bd +--- /dev/null ++++ b/kernel/riscv64/iamin.c +@@ -0,0 +1,77 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++/************************************************************************************** ++* 2013/09/14 Saar ++* BLASTEST float : NoTest ++* BLASTEST double : NoTest ++* CTEST : NoTest ++* TEST : NoTest ++* ++**************************************************************************************/ ++ ++#include "common.h" ++#include <math.h> ++ ++#if defined(DOUBLE) ++ ++#define ABS fabs ++ ++#else ++ ++#define ABS fabsf ++ ++#endif ++ ++ ++BLASLONG CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x) ++{ ++ BLASLONG i=0; ++ BLASLONG ix=0; ++ FLOAT minf=0.0; ++ BLASLONG min=0; ++ ++ if (n <= 0 || inc_x <= 0) return(min); ++ ++ minf=ABS(x[0]); ++ ix += inc_x; ++ i++; ++ ++ while(i < n) ++ { ++ if( ABS(x[ix]) < ABS(minf) ) ++ { ++ min = i; ++ minf = ABS(x[ix]); ++ } ++ ix += inc_x; ++ i++; ++ } ++ return(min+1); ++} ++ ++ +diff --git a/kernel/riscv64/imax.c b/kernel/riscv64/imax.c +new file mode 100644 +index 00000000..5072dd16 +--- /dev/null ++++ b/kernel/riscv64/imax.c +@@ -0,0 +1,69 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++ ++/************************************************************************************** ++* 2013/09/14 Saar ++* BLASTEST float : NoTest ++* BLASTEST double : NoTest ++* CTEST : NoTest ++* TEST : NoTest ++* ++**************************************************************************************/ ++ ++#include "common.h" ++#include <math.h> ++ ++ ++ ++BLASLONG CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x) ++{ ++ BLASLONG i=0; ++ BLASLONG ix=0; ++ FLOAT maxf=0.0; ++ BLASLONG max=0; ++ ++ if (n <= 0 || inc_x <= 0) return(max); ++ ++ maxf=x[0]; ++ ix += inc_x; ++ i++; ++ ++ while(i < n) ++ { ++ if( x[ix] > maxf ) ++ { ++ max = i; ++ maxf = x[ix]; ++ } ++ ix += inc_x; ++ i++; ++ } ++ return(max+1); ++} ++ ++ +diff --git a/kernel/riscv64/imin.c b/kernel/riscv64/imin.c +new file mode 100644 +index 00000000..598cba38 +--- /dev/null ++++ b/kernel/riscv64/imin.c +@@ -0,0 +1,67 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++ ++/************************************************************************************** ++* 2013/08/19 Saar ++* BLASTEST float ++* BLASTEST double ++* ++**************************************************************************************/ ++ ++#include "common.h" ++#include <math.h> ++ ++ ++ ++BLASLONG CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x) ++{ ++ BLASLONG i=0; ++ BLASLONG ix=0; ++ FLOAT minf=0.0; ++ BLASLONG min=0; ++ ++ if (n <= 0 || inc_x <= 0) return(min); ++ ++ minf=x[0]; ++ ix += inc_x; ++ i++; ++ ++ while(i < n) ++ { ++ if( x[ix] > minf ) ++ { ++ min = i; ++ minf = x[ix]; ++ } ++ ix += inc_x; ++ i++; ++ } ++ return(min+1); ++} ++ ++ +diff --git a/kernel/riscv64/izamax.c b/kernel/riscv64/izamax.c +new file mode 100644 +index 00000000..8fe33e95 +--- /dev/null ++++ b/kernel/riscv64/izamax.c +@@ -0,0 +1,81 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++/************************************************************************************** ++* 2013/09/14 Saar ++* BLASTEST float : NoTest ++* BLASTEST double : NoTest ++* CTEST : OK ++* TEST : OK ++* ++**************************************************************************************/ ++ ++#include "common.h" ++#include <math.h> ++ ++#if defined(DOUBLE) ++ ++#define ABS fabs ++ ++#else ++ ++#define ABS fabsf ++ ++#endif ++ ++#define CABS1(x,i) ABS(x[i])+ABS(x[i+1]) ++ ++BLASLONG CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x) ++{ ++ BLASLONG i=0; ++ BLASLONG ix=0; ++ FLOAT maxf; ++ BLASLONG max=0; ++ BLASLONG inc_x2; ++ ++ if (n <= 0 || inc_x <= 0) return(max); ++ ++ inc_x2 = 2 * inc_x; ++ ++ maxf = CABS1(x,0); ++ ix += inc_x2; ++ i++; ++ ++ while(i < n) ++ { ++ if( CABS1(x,ix) > maxf ) ++ { ++ max = i; ++ maxf = CABS1(x,ix); ++ } ++ ix += inc_x2; ++ i++; ++ } ++ return(max+1); ++} ++ ++ +diff --git a/kernel/riscv64/izamin.c b/kernel/riscv64/izamin.c +new file mode 100644 +index 00000000..fb5a0d4c +--- /dev/null ++++ b/kernel/riscv64/izamin.c +@@ -0,0 +1,81 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++/************************************************************************************** ++* 2013/09/14 Saar ++* BLASTEST float : NoTest ++* BLASTEST double : NoTest ++* CTEST : NoTest ++* TEST : NoTest ++* ++**************************************************************************************/ ++ ++#include "common.h" ++#include <math.h> ++ ++#if defined(DOUBLE) ++ ++#define ABS fabs ++ ++#else ++ ++#define ABS fabsf ++ ++#endif ++ ++#define CABS1(x,i) ABS(x[i])+ABS(x[i+1]) ++ ++BLASLONG CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x) ++{ ++ BLASLONG i=0; ++ BLASLONG ix=0; ++ FLOAT minf; ++ BLASLONG min=0; ++ BLASLONG inc_x2; ++ ++ if (n <= 0 || inc_x <= 0) return(min); ++ ++ inc_x2 = 2 * inc_x; ++ ++ minf = CABS1(x,0); ++ ix += inc_x2; ++ i++; ++ ++ while(i < n) ++ { ++ if( CABS1(x,ix) < minf ) ++ { ++ min = i; ++ minf = CABS1(x,ix); ++ } ++ ix += inc_x2; ++ i++; ++ } ++ return(min+1); ++} ++ ++ +diff --git a/kernel/riscv64/max.c b/kernel/riscv64/max.c +new file mode 100644 +index 00000000..2ad956bc +--- /dev/null ++++ b/kernel/riscv64/max.c +@@ -0,0 +1,65 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++/************************************************************************************** ++* 2013/09/14 Saar ++* BLASTEST float : NoTest ++* BLASTEST double : NoTest ++* CTEST : NoTest ++* TEST : NoTest ++* ++**************************************************************************************/ ++ ++#include "common.h" ++#include <math.h> ++ ++ ++FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x) ++{ ++ BLASLONG i=0; ++ BLASLONG ix=0; ++ FLOAT maxf=0.0; ++ ++ if (n <= 0 || inc_x <= 0) return(maxf); ++ ++ maxf=x[0]; ++ ix += inc_x; ++ i++; ++ ++ while(i < n) ++ { ++ if( x[ix] > maxf ) ++ { ++ maxf = x[ix]; ++ } ++ ix += inc_x; ++ i++; ++ } ++ return(maxf); ++} ++ ++ +diff --git a/kernel/riscv64/min.c b/kernel/riscv64/min.c +new file mode 100644 +index 00000000..2812fe39 +--- /dev/null ++++ b/kernel/riscv64/min.c +@@ -0,0 +1,65 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++/************************************************************************************** ++* 2013/09/14 Saar ++* BLASTEST float : NoTest ++* BLASTEST double : NoTest ++* CTEST : NoTest ++* TEST : NoTest ++* ++**************************************************************************************/ ++ ++#include "common.h" ++#include <math.h> ++ ++ ++FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x) ++{ ++ BLASLONG i=0; ++ BLASLONG ix=0; ++ FLOAT minf=0.0; ++ ++ if (n <= 0 || inc_x <= 0) return(minf); ++ ++ minf=x[0]; ++ ix += inc_x; ++ i++; ++ ++ while(i < n) ++ { ++ if( x[ix] < minf ) ++ { ++ minf = x[ix]; ++ } ++ ix += inc_x; ++ i++; ++ } ++ return(minf); ++} ++ ++ +diff --git a/kernel/riscv64/nrm2.c b/kernel/riscv64/nrm2.c +new file mode 100644 +index 00000000..fcff0933 +--- /dev/null ++++ b/kernel/riscv64/nrm2.c +@@ -0,0 +1,88 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++/************************************************************************************** ++* 2013/09/13 Saar ++* BLASTEST float : OK ++* BLASTEST double : OK ++* CTEST : OK ++* TEST : OK ++* ++**************************************************************************************/ ++ ++#include "common.h" ++#include <math.h> ++ ++#if defined(DOUBLE) ++ ++#define ABS fabs ++ ++#else ++ ++#define ABS fabsf ++ ++#endif ++ ++ ++ ++FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x) ++{ ++ BLASLONG i=0; ++ FLOAT scale = 0.0; ++ FLOAT ssq = 1.0; ++ FLOAT absxi = 0.0; ++ ++ ++ if (n <= 0 || inc_x <= 0) return(0.0); ++ if ( n == 1 ) return( ABS(x[0]) ); ++ ++ n *= inc_x; ++ while(i < n) ++ { ++ ++ if ( x[i] != 0.0 ) ++ { ++ absxi = ABS( x[i] ); ++ if ( scale < absxi ) ++ { ++ ssq = 1 + ssq * ( scale / absxi ) * ( scale / absxi ); ++ scale = absxi ; ++ } ++ else ++ { ++ ssq += ( absxi/scale ) * ( absxi/scale ); ++ } ++ ++ } ++ i += inc_x; ++ } ++ scale = scale * sqrt( ssq ); ++ return(scale); ++ ++} ++ ++ +diff --git a/kernel/riscv64/omatcopy_cn.c b/kernel/riscv64/omatcopy_cn.c +new file mode 100644 +index 00000000..4d11b912 +--- /dev/null ++++ b/kernel/riscv64/omatcopy_cn.c +@@ -0,0 +1,90 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++#include "common.h" ++ ++/***************************************************** ++ * 2014/06/09 Saar ++ * ++ * Order ColMajor ++ * No Trans ++ * ++******************************************************/ ++ ++int CNAME(BLASLONG rows, BLASLONG cols, FLOAT alpha, FLOAT *a, BLASLONG lda, FLOAT *b, BLASLONG ldb) ++{ ++ BLASLONG i,j; ++ FLOAT *aptr,*bptr; ++ ++ if ( rows <= 0 ) return(0); ++ if ( cols <= 0 ) return(0); ++ ++ aptr = a; ++ bptr = b; ++ ++ if ( alpha == 0.0 ) ++ { ++ for ( i=0; i<cols ; i++ ) ++ { ++ for(j=0; j<rows; j++) ++ { ++ bptr[j] = 0.0; ++ } ++ bptr += ldb; ++ } ++ return(0); ++ } ++ ++ if ( alpha == 1.0 ) ++ { ++ for ( i=0; i<cols ; i++ ) ++ { ++ for(j=0; j<rows; j++) ++ { ++ bptr[j] = aptr[j]; ++ } ++ aptr += lda; ++ bptr += ldb; ++ } ++ return(0); ++ } ++ ++ for ( i=0; i<cols ; i++ ) ++ { ++ for(j=0; j<rows; j++) ++ { ++ bptr[j] = alpha * aptr[j]; ++ } ++ aptr += lda; ++ bptr += ldb; ++ } ++ ++ return(0); ++ ++} ++ ++ +diff --git a/kernel/riscv64/omatcopy_ct.c b/kernel/riscv64/omatcopy_ct.c +new file mode 100644 +index 00000000..b2587813 +--- /dev/null ++++ b/kernel/riscv64/omatcopy_ct.c +@@ -0,0 +1,89 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++#include "common.h" ++ ++/***************************************************** ++ * 2014/06/09 Saar ++ * ++ * Order ColMajor ++ * Trans ++ * ++******************************************************/ ++ ++int CNAME(BLASLONG rows, BLASLONG cols, FLOAT alpha, FLOAT *a, BLASLONG lda, FLOAT *b, BLASLONG ldb) ++{ ++ BLASLONG i,j; ++ FLOAT *aptr,*bptr; ++ ++ if ( rows <= 0 ) return(0); ++ if ( cols <= 0 ) return(0); ++ ++ aptr = a; ++ ++ if ( alpha == 0.0 ) ++ { ++ for ( i=0; i<cols ; i++ ) ++ { ++ bptr = &b[i]; ++ for(j=0; j<rows; j++) ++ { ++ bptr[j*ldb] = 0.0; ++ } ++ } ++ return(0); ++ } ++ ++ if ( alpha == 1.0 ) ++ { ++ for ( i=0; i<cols ; i++ ) ++ { ++ bptr = &b[i]; ++ for(j=0; j<rows; j++) ++ { ++ bptr[j*ldb] = aptr[j]; ++ } ++ aptr += lda; ++ } ++ return(0); ++ } ++ ++ for ( i=0; i<cols ; i++ ) ++ { ++ bptr = &b[i]; ++ for(j=0; j<rows; j++) ++ { ++ bptr[j*ldb] = alpha * aptr[j]; ++ } ++ aptr += lda; ++ } ++ ++ return(0); ++ ++} ++ ++ +diff --git a/kernel/riscv64/omatcopy_rn.c b/kernel/riscv64/omatcopy_rn.c +new file mode 100644 +index 00000000..57515e72 +--- /dev/null ++++ b/kernel/riscv64/omatcopy_rn.c +@@ -0,0 +1,90 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++#include "common.h" ++ ++/***************************************************** ++ * 2014/06/09 Saar ++ * ++ * Order rowMajor ++ * No Trans ++ * ++******************************************************/ ++ ++int CNAME(BLASLONG rows, BLASLONG cols, FLOAT alpha, FLOAT *a, BLASLONG lda, FLOAT *b, BLASLONG ldb) ++{ ++ BLASLONG i,j; ++ FLOAT *aptr,*bptr; ++ ++ if ( rows <= 0 ) return(0); ++ if ( cols <= 0 ) return(0); ++ ++ aptr = a; ++ bptr = b; ++ ++ if ( alpha == 0.0 ) ++ { ++ for ( i=0; i<rows ; i++ ) ++ { ++ for(j=0; j<cols; j++) ++ { ++ bptr[j] = 0.0; ++ } ++ bptr += ldb; ++ } ++ return(0); ++ } ++ ++ if ( alpha == 1.0 ) ++ { ++ for ( i=0; i<rows ; i++ ) ++ { ++ for(j=0; j<cols; j++) ++ { ++ bptr[j] = aptr[j]; ++ } ++ aptr += lda; ++ bptr += ldb; ++ } ++ return(0); ++ } ++ ++ for ( i=0; i<rows ; i++ ) ++ { ++ for(j=0; j<cols; j++) ++ { ++ bptr[j] = alpha * aptr[j]; ++ } ++ aptr += lda; ++ bptr += ldb; ++ } ++ ++ return(0); ++ ++} ++ ++ +diff --git a/kernel/riscv64/omatcopy_rt.c b/kernel/riscv64/omatcopy_rt.c +new file mode 100644 +index 00000000..9d58350d +--- /dev/null ++++ b/kernel/riscv64/omatcopy_rt.c +@@ -0,0 +1,62 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++#include "common.h" ++ ++/***************************************************** ++ * 2014/06/09 Saar ++ * ++ * Order rowMajor ++ * Trans ++ * ++******************************************************/ ++ ++int CNAME(BLASLONG rows, BLASLONG cols, FLOAT alpha, FLOAT *a, BLASLONG lda, FLOAT *b, BLASLONG ldb) ++{ ++ BLASLONG i,j; ++ FLOAT *aptr,*bptr; ++ ++ if ( rows <= 0 ) return(0); ++ if ( cols <= 0 ) return(0); ++ ++ aptr = a; ++ ++ for ( i=0; i<rows ; i++ ) ++ { ++ bptr = &b[i]; ++ for(j=0; j<cols; j++) ++ { ++ bptr[j*ldb] = alpha * aptr[j]; ++ } ++ aptr += lda; ++ } ++ ++ return(0); ++ ++} ++ ++ +diff --git a/kernel/riscv64/rot.c b/kernel/riscv64/rot.c +new file mode 100644 +index 00000000..18b4ca25 +--- /dev/null ++++ b/kernel/riscv64/rot.c +@@ -0,0 +1,62 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++/************************************************************************************** ++* 2013/09/14 Saar ++* BLASTEST float : OK ++* BLASTEST double : OK ++* CTEST : OK ++* TEST : OK ++* ++**************************************************************************************/ ++ ++#include "common.h" ++ ++int CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y, FLOAT c, FLOAT s) ++{ ++ BLASLONG i=0; ++ BLASLONG ix=0,iy=0; ++ FLOAT temp; ++ ++ if ( n <= 0 ) return(0); ++ ++ while(i < n) ++ { ++ temp = c*x[ix] + s*y[iy] ; ++ y[iy] = c*y[iy] - s*x[ix] ; ++ x[ix] = temp ; ++ ++ ix += inc_x ; ++ iy += inc_y ; ++ i++ ; ++ ++ } ++ return(0); ++ ++} ++ ++ +diff --git a/kernel/riscv64/scal.c b/kernel/riscv64/scal.c +new file mode 100644 +index 00000000..4ef49e29 +--- /dev/null ++++ b/kernel/riscv64/scal.c +@@ -0,0 +1,63 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++/************************************************************************************** ++* 2013/09/14 Saar ++* BLASTEST float : OK ++* BLASTEST double : OK ++* CTEST : OK ++* TEST : OK ++* ++**************************************************************************************/ ++ ++#include "common.h" ++ ++int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y, FLOAT *dummy, BLASLONG dummy2) ++{ ++ BLASLONG i=0,j=0; ++ ++ if ( (n <= 0) || (inc_x <= 0)) ++ return(0); ++ ++ ++ while(j < n) ++ { ++ ++ if ( da == 0.0 ) ++ x[i]=0.0; ++ else ++ x[i] = da * x[i] ; ++ ++ i += inc_x ; ++ j++; ++ ++ } ++ return 0; ++ ++} ++ ++ +diff --git a/kernel/riscv64/swap.c b/kernel/riscv64/swap.c +new file mode 100644 +index 00000000..eac621fb +--- /dev/null ++++ b/kernel/riscv64/swap.c +@@ -0,0 +1,62 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++/************************************************************************************** ++* 2013/08/20 Saar ++* BLASTEST float OK ++* BLASTEST double OK ++* ++**************************************************************************************/ ++ ++#include "common.h" ++#include <stdio.h> ++ ++int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT dummy3, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y, FLOAT *dummy, BLASLONG dummy2) ++{ ++ BLASLONG i=0; ++ BLASLONG ix=0,iy=0; ++ FLOAT temp; ++ ++ if ( n < 0 ) return(0); ++ ++ while(i < n) ++ { ++ ++ temp = x[ix] ; ++ x[ix] = y[iy] ; ++ y[iy] = temp ; ++ ++ ix += inc_x ; ++ iy += inc_y ; ++ i++ ; ++ ++ } ++ return(0); ++ ++} ++ ++ +diff --git a/kernel/riscv64/symv_L.c b/kernel/riscv64/symv_L.c +new file mode 100644 +index 00000000..8f48d03f +--- /dev/null ++++ b/kernel/riscv64/symv_L.c +@@ -0,0 +1,70 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++ ++#include "common.h" ++ ++int CNAME(BLASLONG m, BLASLONG offset, FLOAT alpha, FLOAT *a, BLASLONG lda, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y, FLOAT *buffer) ++{ ++ BLASLONG i; ++ BLASLONG ix,iy; ++ BLASLONG jx,jy; ++ BLASLONG j; ++ FLOAT temp1; ++ FLOAT temp2; ++ ++#if 0 ++ if ( m != offset ) ++ printf("Symv_L: m=%d offset=%d\n",m,offset); ++#endif ++ ++ jx = 0; ++ jy = 0; ++ ++ for (j=0; j<offset; j++) ++ { ++ temp1 = alpha * x[jx]; ++ temp2 = 0.0; ++ y[jy] += temp1 * a[j*lda+j]; ++ iy = jy; ++ ix = jx; ++ for (i=j+1; i<m; i++) ++ { ++ ix += inc_x; ++ iy += inc_y; ++ y[iy] += temp1 * a[j*lda+i]; ++ temp2 += a[j*lda+i] * x[ix]; ++ ++ } ++ y[jy] += alpha * temp2; ++ jx += inc_x; ++ jy += inc_y; ++ } ++ return(0); ++} ++ ++ +diff --git a/kernel/riscv64/symv_U.c b/kernel/riscv64/symv_U.c +new file mode 100644 +index 00000000..b5a0c96e +--- /dev/null ++++ b/kernel/riscv64/symv_U.c +@@ -0,0 +1,71 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++ ++#include "common.h" ++ ++int CNAME(BLASLONG m, BLASLONG offset, FLOAT alpha, FLOAT *a, BLASLONG lda, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y, FLOAT *buffer) ++{ ++ BLASLONG i; ++ BLASLONG ix,iy; ++ BLASLONG jx,jy; ++ BLASLONG j; ++ FLOAT temp1; ++ FLOAT temp2; ++ ++#if 0 ++ if( m != offset ) ++ printf("Symv_U: m=%d offset=%d\n",m,offset); ++#endif ++ ++ BLASLONG m1 = m - offset; ++ ++ jx = m1 * inc_x; ++ jy = m1 * inc_y; ++ ++ for (j=m1; j<m; j++) ++ { ++ temp1 = alpha * x[jx]; ++ temp2 = 0.0; ++ iy = 0; ++ ix = 0; ++ for (i=0; i<j; i++) ++ { ++ y[iy] += temp1 * a[j*lda+i]; ++ temp2 += a[j*lda+i] * x[ix]; ++ ix += inc_x; ++ iy += inc_y; ++ ++ } ++ y[jy] += temp1 * a[j*lda+j] + alpha * temp2; ++ jx += inc_x; ++ jy += inc_y; ++ } ++ return(0); ++} ++ ++ +diff --git a/kernel/riscv64/zamax.c b/kernel/riscv64/zamax.c +new file mode 100644 +index 00000000..a39bd782 +--- /dev/null ++++ b/kernel/riscv64/zamax.c +@@ -0,0 +1,79 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++/************************************************************************************** ++* 2013/09/14 Saar ++* BLASTEST float : OK ++* BLASTEST double : OK ++* CTEST : NoTest ++* TEST : NoTest ++* ++**************************************************************************************/ ++ ++#include "common.h" ++#include <math.h> ++ ++#if defined(DOUBLE) ++ ++#define ABS fabs ++ ++#else ++ ++#define ABS fabsf ++ ++#endif ++ ++#define CABS1(x,i) ABS(x[i])+ABS(x[i+1]) ++ ++FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x) ++{ ++ BLASLONG i=0; ++ BLASLONG ix=0; ++ FLOAT maxf; ++ BLASLONG inc_x2; ++ ++ if (n <= 0 || inc_x <= 0) return(0.0); ++ ++ inc_x2 = 2 * inc_x; ++ ++ maxf = CABS1(x,0); ++ ix += inc_x2; ++ i++; ++ ++ while(i < n) ++ { ++ if( CABS1(x,ix) > maxf ) ++ { ++ maxf = CABS1(x,ix); ++ } ++ ix += inc_x2; ++ i++; ++ } ++ return(maxf); ++} ++ ++ +diff --git a/kernel/riscv64/zamin.c b/kernel/riscv64/zamin.c +new file mode 100644 +index 00000000..02eab3e7 +--- /dev/null ++++ b/kernel/riscv64/zamin.c +@@ -0,0 +1,79 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++/************************************************************************************** ++* 2013/09/14 Saar ++* BLASTEST float : OK ++* BLASTEST double : OK ++* CTEST : NoTest ++* TEST : NoTest ++* ++**************************************************************************************/ ++ ++#include "common.h" ++#include <math.h> ++ ++#if defined(DOUBLE) ++ ++#define ABS fabs ++ ++#else ++ ++#define ABS fabsf ++ ++#endif ++ ++#define CABS1(x,i) ABS(x[i])+ABS(x[i+1]) ++ ++FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x) ++{ ++ BLASLONG i=0; ++ BLASLONG ix=0; ++ FLOAT minf; ++ BLASLONG inc_x2; ++ ++ if (n <= 0 || inc_x <= 0) return(0.0); ++ ++ inc_x2 = 2 * inc_x; ++ ++ minf = CABS1(x,0); ++ ix += inc_x2; ++ i++; ++ ++ while(i < n) ++ { ++ if( CABS1(x,ix) < minf ) ++ { ++ minf = CABS1(x,ix); ++ } ++ ix += inc_x2; ++ i++; ++ } ++ return(minf); ++} ++ ++ +diff --git a/kernel/riscv64/zasum.c b/kernel/riscv64/zasum.c +new file mode 100644 +index 00000000..61e85cae +--- /dev/null ++++ b/kernel/riscv64/zasum.c +@@ -0,0 +1,72 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++/************************************************************************************** ++* 2013/09/14 Saar ++* BLASTEST float : OK ++* BLASTEST double : OK ++* CTEST : OK ++* TEST : OK ++* ++**************************************************************************************/ ++ ++ ++#include "common.h" ++#include <math.h> ++ ++#if defined(DOUBLE) ++ ++#define ABS fabs ++ ++#else ++ ++#define ABS fabsf ++ ++#endif ++ ++#define CABS1(x,i) ABS(x[i])+ABS(x[i+1]) ++ ++FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x) ++{ ++ BLASLONG i=0; ++ FLOAT sumf = 0.0; ++ BLASLONG inc_x2; ++ ++ if (n <= 0 || inc_x <= 0) return(sumf); ++ ++ inc_x2 = 2 * inc_x; ++ ++ n *= inc_x2; ++ while(i < n) ++ { ++ sumf += CABS1(x,i); ++ i += inc_x2; ++ } ++ return(sumf); ++} ++ ++ +diff --git a/kernel/riscv64/zaxpby.c b/kernel/riscv64/zaxpby.c +new file mode 100644 +index 00000000..44535441 +--- /dev/null ++++ b/kernel/riscv64/zaxpby.c +@@ -0,0 +1,118 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++/*************************************************************************** ++* 2014/06/07 Saar ++* ++***************************************************************************/ ++ ++#include "common.h" ++ ++int CNAME(BLASLONG n, FLOAT alpha_r, FLOAT alpha_i, FLOAT *x, BLASLONG inc_x, FLOAT beta_r, FLOAT beta_i,FLOAT *y, BLASLONG inc_y) ++{ ++ BLASLONG i=0; ++ BLASLONG ix,iy; ++ FLOAT temp; ++ BLASLONG inc_x2, inc_y2; ++ ++ if ( n <= 0 ) return(0); ++ ++ ix = 0; ++ iy = 0; ++ ++ inc_x2 = 2 * inc_x; ++ inc_y2 = 2 * inc_y; ++ ++ if ( beta_r == 0.0 && beta_i == 0.0) ++ { ++ if ( alpha_r == 0.0 && alpha_i == 0.0 ) ++ { ++ ++ while(i < n) ++ { ++ y[iy] = 0.0 ; ++ y[iy+1] = 0.0 ; ++ iy += inc_y2 ; ++ i++ ; ++ } ++ ++ } ++ else ++ { ++ ++ while(i < n) ++ { ++ y[iy] = ( alpha_r * x[ix] - alpha_i * x[ix+1] ) ; ++ y[iy+1] = ( alpha_r * x[ix+1] + alpha_i * x[ix] ) ; ++ ix += inc_x2 ; ++ iy += inc_y2 ; ++ i++ ; ++ } ++ ++ ++ } ++ ++ } ++ else ++ { ++ if ( alpha_r == 0.0 && alpha_i == 0.0 ) ++ { ++ ++ while(i < n) ++ { ++ temp = ( beta_r * y[iy] - beta_i * y[iy+1] ) ; ++ y[iy+1] = ( beta_r * y[iy+1] + beta_i * y[iy] ) ; ++ y[iy] = temp; ++ iy += inc_y2 ; ++ i++ ; ++ } ++ ++ } ++ else ++ { ++ ++ while(i < n) ++ { ++ temp = ( alpha_r * x[ix] - alpha_i * x[ix+1] ) + ( beta_r * y[iy] - beta_i * y[iy+1] ) ; ++ y[iy+1] = ( alpha_r * x[ix+1] + alpha_i * x[ix] ) + ( beta_r * y[iy+1] + beta_i * y[iy] ) ; ++ y[iy] = temp; ++ ix += inc_x2 ; ++ iy += inc_y2 ; ++ i++ ; ++ } ++ ++ ++ } ++ ++ ++ ++ } ++ return(0); ++ ++} ++ ++ +diff --git a/kernel/riscv64/zaxpy.c b/kernel/riscv64/zaxpy.c +new file mode 100644 +index 00000000..1dcaeac2 +--- /dev/null ++++ b/kernel/riscv64/zaxpy.c +@@ -0,0 +1,74 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++/************************************************************************************** ++* 2013/09/15 Saar ++* BLASTEST float : OK ++* BLASTEST double : OK ++* CTEST : OK ++* TEST : OK ++* ++**************************************************************************************/ ++ ++ ++#include "common.h" ++ ++int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y, FLOAT *dummy, BLASLONG dummy2) ++{ ++ BLASLONG i=0; ++ BLASLONG ix,iy; ++ BLASLONG inc_x2; ++ BLASLONG inc_y2; ++ ++ if ( n < 0 ) return(0); ++ if ( da_r == 0.0 && da_i == 0.0 ) return(0); ++ ++ ix = 0; ++ iy = 0; ++ ++ inc_x2 = 2 * inc_x; ++ inc_y2 = 2 * inc_y; ++ ++ while(i < n) ++ { ++#if !defined(CONJ) ++ y[iy] += ( da_r * x[ix] - da_i * x[ix+1] ) ; ++ y[iy+1] += ( da_r * x[ix+1] + da_i * x[ix] ) ; ++#else ++ y[iy] += ( da_r * x[ix] + da_i * x[ix+1] ) ; ++ y[iy+1] -= ( da_r * x[ix+1] - da_i * x[ix] ) ; ++#endif ++ ix += inc_x2 ; ++ iy += inc_y2 ; ++ i++ ; ++ ++ } ++ return(0); ++ ++} ++ ++ +diff --git a/kernel/riscv64/zcopy.c b/kernel/riscv64/zcopy.c +new file mode 100644 +index 00000000..07fe584c +--- /dev/null ++++ b/kernel/riscv64/zcopy.c +@@ -0,0 +1,65 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++/************************************************************************************** ++* 2013/09/14 Saar ++* BLASTEST float : OK ++* BLASTEST double : OK ++* CTEST : OK ++* TEST : OK ++* ++**************************************************************************************/ ++ ++#include "common.h" ++ ++int CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y) ++{ ++ BLASLONG i=0; ++ BLASLONG ix=0,iy=0; ++ BLASLONG inc_x2; ++ BLASLONG inc_y2; ++ ++ if ( n < 0 ) return(0); ++ ++ inc_x2 = 2 * inc_x; ++ inc_y2 = 2 * inc_y; ++ ++ while(i < n) ++ { ++ ++ y[iy] = x[ix] ; ++ y[iy+1] = x[ix+1] ; ++ ix += inc_x2; ++ iy += inc_y2; ++ i++ ; ++ ++ } ++ return(0); ++ ++} ++ ++ +diff --git a/kernel/riscv64/zdot.c b/kernel/riscv64/zdot.c +new file mode 100644 +index 00000000..733c235c +--- /dev/null ++++ b/kernel/riscv64/zdot.c +@@ -0,0 +1,80 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++/************************************************************************************** ++* 2013/09/14 Saar ++* BLASTEST float : FAIL ++* BLASTEST double : FAIL ++* CTEST : OK ++* TEST : OK ++* ++**************************************************************************************/ ++ ++#include "common.h" ++ ++OPENBLAS_COMPLEX_FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y) ++ ++{ ++ BLASLONG i=0; ++ BLASLONG ix=0,iy=0; ++ FLOAT dot[2]; ++ OPENBLAS_COMPLEX_FLOAT result; ++ BLASLONG inc_x2; ++ BLASLONG inc_y2; ++ ++ dot[0]=0.0; ++ dot[1]=0.0; ++ ++ CREAL(result) = 0.0 ; ++ CIMAG(result) = 0.0 ; ++ ++ if ( n < 1 ) return(result); ++ ++ inc_x2 = 2 * inc_x ; ++ inc_y2 = 2 * inc_y ; ++ ++ while(i < n) ++ { ++#if !defined(CONJ) ++ dot[0] += ( x[ix] * y[iy] - x[ix+1] * y[iy+1] ) ; ++ dot[1] += ( x[ix+1] * y[iy] + x[ix] * y[iy+1] ) ; ++#else ++ dot[0] += ( x[ix] * y[iy] + x[ix+1] * y[iy+1] ) ; ++ dot[1] -= ( x[ix+1] * y[iy] - x[ix] * y[iy+1] ) ; ++#endif ++ ix += inc_x2 ; ++ iy += inc_y2 ; ++ i++ ; ++ ++ } ++ CREAL(result) = dot[0]; ++ CIMAG(result) = dot[1]; ++ return(result); ++ ++} ++ ++ +diff --git a/kernel/riscv64/zgemv_n.c b/kernel/riscv64/zgemv_n.c +new file mode 100644 +index 00000000..b9b03f79 +--- /dev/null ++++ b/kernel/riscv64/zgemv_n.c +@@ -0,0 +1,157 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++/************************************************************************************** ++ * * 2013/11/23 Saar ++ * * BLASTEST float : OK ++ * * BLASTEST double : OK ++ * CTEST : OK ++ * TEST : OK ++ * * ++ * **************************************************************************************/ ++ ++ ++#include "common.h" ++ ++int CNAME(BLASLONG m, BLASLONG n, BLASLONG dummy1, FLOAT alpha_r, FLOAT alpha_i, FLOAT *a, BLASLONG lda, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y, FLOAT *buffer) ++{ ++ BLASLONG i; ++ BLASLONG ix,iy; ++ BLASLONG j; ++ FLOAT *a_ptr; ++ FLOAT temp_r,temp_i; ++ BLASLONG inc_x2,inc_y2; ++ BLASLONG lda2; ++ BLASLONG i2; ++ ++ lda2 = 2*lda; ++ ++ ix = 0; ++ a_ptr = a; ++ ++ if ( inc_x == 1 && inc_y == 1 ) ++ { ++ ++ for (j=0; j<n; j++) ++ { ++ ++#if !defined(XCONJ) ++ temp_r = alpha_r * x[ix] - alpha_i * x[ix+1]; ++ temp_i = alpha_r * x[ix+1] + alpha_i * x[ix]; ++#else ++ temp_r = alpha_r * x[ix] + alpha_i * x[ix+1]; ++ temp_i = alpha_r * x[ix+1] - alpha_i * x[ix]; ++#endif ++ iy = 0; ++ i2=0; ++ ++ for (i=0; i<m; i++) ++ { ++#if !defined(CONJ) ++ ++#if !defined(XCONJ) ++ y[iy] += temp_r * a_ptr[i2] - temp_i * a_ptr[i2+1]; ++ y[iy+1] += temp_r * a_ptr[i2+1] + temp_i * a_ptr[i2]; ++#else ++ y[iy] += temp_r * a_ptr[i2] + temp_i * a_ptr[i2+1]; ++ y[iy+1] += temp_r * a_ptr[i2+1] - temp_i * a_ptr[i2]; ++#endif ++ ++#else ++ ++#if !defined(XCONJ) ++ y[iy] += temp_r * a_ptr[i2] + temp_i * a_ptr[i2+1]; ++ y[iy+1] -= temp_r * a_ptr[i2+1] - temp_i * a_ptr[i2]; ++#else ++ y[iy] += temp_r * a_ptr[i2] - temp_i * a_ptr[i2+1]; ++ y[iy+1] -= temp_r * a_ptr[i2+1] + temp_i * a_ptr[i2]; ++#endif ++ ++#endif ++ i2 += 2; ++ iy += 2; ++ } ++ a_ptr += lda2; ++ ix += 2; ++ } ++ ++ return(0); ++ ++ } ++ ++ ++ inc_x2 = 2 * inc_x; ++ inc_y2 = 2 * inc_y; ++ ++ for (j=0; j<n; j++) ++ { ++ ++#if !defined(XCONJ) ++ temp_r = alpha_r * x[ix] - alpha_i * x[ix+1]; ++ temp_i = alpha_r * x[ix+1] + alpha_i * x[ix]; ++#else ++ temp_r = alpha_r * x[ix] + alpha_i * x[ix+1]; ++ temp_i = alpha_r * x[ix+1] - alpha_i * x[ix]; ++#endif ++ iy = 0; ++ i2=0; ++ ++ for (i=0; i<m; i++) ++ { ++#if !defined(CONJ) ++ ++#if !defined(XCONJ) ++ y[iy] += temp_r * a_ptr[i2] - temp_i * a_ptr[i2+1]; ++ y[iy+1] += temp_r * a_ptr[i2+1] + temp_i * a_ptr[i2]; ++#else ++ y[iy] += temp_r * a_ptr[i2] + temp_i * a_ptr[i2+1]; ++ y[iy+1] += temp_r * a_ptr[i2+1] - temp_i * a_ptr[i2]; ++#endif ++ ++#else ++ ++#if !defined(XCONJ) ++ y[iy] += temp_r * a_ptr[i2] + temp_i * a_ptr[i2+1]; ++ y[iy+1] -= temp_r * a_ptr[i2+1] - temp_i * a_ptr[i2]; ++#else ++ y[iy] += temp_r * a_ptr[i2] - temp_i * a_ptr[i2+1]; ++ y[iy+1] -= temp_r * a_ptr[i2+1] + temp_i * a_ptr[i2]; ++#endif ++ ++#endif ++ i2 += 2; ++ iy += inc_y2; ++ } ++ a_ptr += lda2; ++ ix += inc_x2; ++ } ++ ++ ++ return(0); ++} ++ ++ +diff --git a/kernel/riscv64/zgemv_t.c b/kernel/riscv64/zgemv_t.c +new file mode 100644 +index 00000000..1239cf3f +--- /dev/null ++++ b/kernel/riscv64/zgemv_t.c +@@ -0,0 +1,140 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++/************************************************************************************** ++ * * 2013/11/23 Saar ++ * * BLASTEST float : OK ++ * * BLASTEST double : OK ++ * CTEST : OK ++ * TEST : OK ++ * * ++ * **************************************************************************************/ ++ ++ ++#include "common.h" ++ ++int CNAME(BLASLONG m, BLASLONG n, BLASLONG dummy1, FLOAT alpha_r, FLOAT alpha_i, FLOAT *a, BLASLONG lda, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y, FLOAT *buffer) ++{ ++ BLASLONG i; ++ BLASLONG ix,iy; ++ BLASLONG j; ++ FLOAT *a_ptr; ++ FLOAT temp_r,temp_i; ++ BLASLONG inc_x2,inc_y2; ++ BLASLONG lda2; ++ BLASLONG i2; ++ ++ lda2 = 2*lda; ++ ++ iy = 0; ++ a_ptr = a; ++ ++ if ( inc_x == 1 && inc_y == 1 ) ++ { ++ ++ for (j=0; j<n; j++) ++ { ++ temp_r = 0.0; ++ temp_i = 0.0; ++ ix = 0; ++ i2=0; ++ ++ for (i=0; i<m; i++) ++ { ++ ++#if ( !defined(CONJ) && !defined(XCONJ) ) || ( defined(CONJ) && defined(XCONJ) ) ++ temp_r += a_ptr[i2] * x[ix] - a_ptr[i2+1] * x[ix+1]; ++ temp_i += a_ptr[i2] * x[ix+1] + a_ptr[i2+1] * x[ix]; ++#else ++ temp_r += a_ptr[i2] * x[ix] + a_ptr[i2+1] * x[ix+1]; ++ temp_i += a_ptr[i2] * x[ix+1] - a_ptr[i2+1] * x[ix]; ++#endif ++ ++ i2 += 2; ++ ix += 2; ++ } ++ ++#if !defined(XCONJ) ++ y[iy] += alpha_r * temp_r - alpha_i * temp_i; ++ y[iy+1] += alpha_r * temp_i + alpha_i * temp_r; ++#else ++ y[iy] += alpha_r * temp_r + alpha_i * temp_i; ++ y[iy+1] -= alpha_r * temp_i - alpha_i * temp_r; ++#endif ++ ++ a_ptr += lda2; ++ iy += 2; ++ } ++ ++ return(0); ++ ++ } ++ ++ ++ inc_x2 = 2 * inc_x; ++ inc_y2 = 2 * inc_y; ++ ++ for (j=0; j<n; j++) ++ { ++ temp_r = 0.0; ++ temp_i = 0.0; ++ ix = 0; ++ i2=0; ++ ++ for (i=0; i<m; i++) ++ { ++ ++#if ( !defined(CONJ) && !defined(XCONJ) ) || ( defined(CONJ) && defined(XCONJ) ) ++ temp_r += a_ptr[i2] * x[ix] - a_ptr[i2+1] * x[ix+1]; ++ temp_i += a_ptr[i2] * x[ix+1] + a_ptr[i2+1] * x[ix]; ++#else ++ temp_r += a_ptr[i2] * x[ix] + a_ptr[i2+1] * x[ix+1]; ++ temp_i += a_ptr[i2] * x[ix+1] - a_ptr[i2+1] * x[ix]; ++#endif ++ ++ i2 += 2; ++ ix += inc_x2; ++ } ++ ++#if !defined(XCONJ) ++ y[iy] += alpha_r * temp_r - alpha_i * temp_i; ++ y[iy+1] += alpha_r * temp_i + alpha_i * temp_r; ++#else ++ y[iy] += alpha_r * temp_r + alpha_i * temp_i; ++ y[iy+1] -= alpha_r * temp_i - alpha_i * temp_r; ++#endif ++ ++ a_ptr += lda2; ++ iy += inc_y2; ++ } ++ ++ return(0); ++ ++} ++ ++ ++ +diff --git a/kernel/riscv64/znrm2.c b/kernel/riscv64/znrm2.c +new file mode 100644 +index 00000000..fc1c8b54 +--- /dev/null ++++ b/kernel/riscv64/znrm2.c +@@ -0,0 +1,106 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++/************************************************************************************** ++* 2013/09/13 Saar ++* BLASTEST float : OK ++* BLASTEST double : OK ++* CTEST : OK ++* TEST : OK ++* ++**************************************************************************************/ ++ ++#include "common.h" ++#include <math.h> ++ ++#if defined(DOUBLE) ++ ++#define ABS fabs ++ ++#else ++ ++#define ABS fabsf ++ ++#endif ++ ++ ++ ++FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x) ++{ ++ BLASLONG i=0; ++ FLOAT scale = 0.0; ++ FLOAT ssq = 1.0; ++ BLASLONG inc_x2; ++ FLOAT temp; ++ ++ if (n <= 0 || inc_x <= 0) return(0.0); ++ ++ inc_x2 = 2 * inc_x; ++ ++ n *= inc_x2; ++ while(i < n) ++ { ++ ++ if ( x[i] != 0.0 ) ++ { ++ temp = ABS( x[i] ); ++ if ( scale < temp ) ++ { ++ ssq = 1 + ssq * ( scale / temp ) * ( scale / temp ); ++ scale = temp ; ++ } ++ else ++ { ++ ssq += ( temp / scale ) * ( temp / scale ); ++ } ++ ++ } ++ ++ if ( x[i+1] != 0.0 ) ++ { ++ temp = ABS( x[i+1] ); ++ if ( scale < temp ) ++ { ++ ssq = 1 + ssq * ( scale / temp ) * ( scale / temp ); ++ scale = temp ; ++ } ++ else ++ { ++ ssq += ( temp / scale ) * ( temp / scale ); ++ } ++ ++ } ++ ++ ++ i += inc_x2; ++ } ++ scale = scale * sqrt( ssq ); ++ return(scale); ++ ++} ++ ++ +diff --git a/kernel/riscv64/zomatcopy_cn.c b/kernel/riscv64/zomatcopy_cn.c +new file mode 100644 +index 00000000..f5a7a628 +--- /dev/null ++++ b/kernel/riscv64/zomatcopy_cn.c +@@ -0,0 +1,70 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++#include "common.h" ++ ++/***************************************************** ++ * 2014/06/09 Saar ++ * ++ * Order ColMajor ++ * No Trans ++ * ++******************************************************/ ++ ++int CNAME(BLASLONG rows, BLASLONG cols, FLOAT alpha_r, FLOAT alpha_i, FLOAT *a, BLASLONG lda, FLOAT *b, BLASLONG ldb) ++{ ++ BLASLONG i,j,ia; ++ FLOAT *aptr,*bptr; ++ ++ if ( rows <= 0 ) return(0); ++ if ( cols <= 0 ) return(0); ++ ++ aptr = a; ++ bptr = b; ++ ++ lda *= 2; ++ ldb *= 2; ++ ++ for ( i=0; i<cols ; i++ ) ++ { ++ ia = 0; ++ ++ for(j=0; j<rows; j++) ++ { ++ bptr[ia] = alpha_r * aptr[ia] - alpha_i * aptr[ia+1]; ++ bptr[ia+1] = alpha_r * aptr[ia+1] + alpha_i * aptr[ia]; ++ ia+=2; ++ } ++ aptr += lda; ++ bptr += ldb; ++ } ++ ++ return(0); ++ ++} ++ ++ +diff --git a/kernel/riscv64/zomatcopy_cnc.c b/kernel/riscv64/zomatcopy_cnc.c +new file mode 100644 +index 00000000..210c3f71 +--- /dev/null ++++ b/kernel/riscv64/zomatcopy_cnc.c +@@ -0,0 +1,69 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++#include "common.h" ++ ++/***************************************************** ++ * 2014/06/09 Saar ++ * ++ * Order ColMajor ++ * No Trans, conjugate ++ * ++******************************************************/ ++ ++int CNAME(BLASLONG rows, BLASLONG cols, FLOAT alpha_r, FLOAT alpha_i, FLOAT *a, BLASLONG lda, FLOAT *b, BLASLONG ldb) ++{ ++ BLASLONG i,j,ia; ++ FLOAT *aptr,*bptr; ++ ++ if ( rows <= 0 ) return(0); ++ if ( cols <= 0 ) return(0); ++ ++ aptr = a; ++ bptr = b; ++ lda *= 2; ++ ldb *= 2; ++ ++ for ( i=0; i<cols ; i++ ) ++ { ++ ia = 0; ++ ++ for(j=0; j<rows; j++) ++ { ++ bptr[ia] = alpha_r * aptr[ia] + alpha_i * aptr[ia+1]; ++ bptr[ia+1] = - alpha_r * aptr[ia+1] + alpha_i * aptr[ia]; ++ ia += 2; ++ } ++ aptr += lda; ++ bptr += ldb; ++ } ++ ++ return(0); ++ ++} ++ ++ +diff --git a/kernel/riscv64/zomatcopy_ct.c b/kernel/riscv64/zomatcopy_ct.c +new file mode 100644 +index 00000000..38bc9b9f +--- /dev/null ++++ b/kernel/riscv64/zomatcopy_ct.c +@@ -0,0 +1,71 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++#include "common.h" ++ ++/***************************************************** ++ * 2014/06/09 Saar ++ * ++ * Order ColMajor ++ * Trans ++ * ++******************************************************/ ++ ++int CNAME(BLASLONG rows, BLASLONG cols, FLOAT alpha_r, FLOAT alpha_i, FLOAT *a, BLASLONG lda, FLOAT *b, BLASLONG ldb) ++{ ++ BLASLONG i,j,ia,ib; ++ FLOAT *aptr,*bptr; ++ ++ if ( rows <= 0 ) return(0); ++ if ( cols <= 0 ) return(0); ++ ++ aptr = a; ++ ++ lda *= 2; ++ ldb *= 2; ++ ib = 0; ++ for ( i=0; i<cols ; i++ ) ++ { ++ bptr = &b[ib]; ++ ia = 0; ++ ++ for(j=0; j<rows; j++) ++ { ++ bptr[0] = alpha_r * aptr[ia] - alpha_i * aptr[ia+1]; ++ bptr[1] = alpha_r * aptr[ia+1] + alpha_i * aptr[ia]; ++ ia += 2; ++ bptr += ldb; ++ } ++ aptr += lda; ++ ib += 2; ++ } ++ ++ return(0); ++ ++} ++ ++ +diff --git a/kernel/riscv64/zomatcopy_ctc.c b/kernel/riscv64/zomatcopy_ctc.c +new file mode 100644 +index 00000000..34e7e919 +--- /dev/null ++++ b/kernel/riscv64/zomatcopy_ctc.c +@@ -0,0 +1,71 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++#include "common.h" ++ ++/***************************************************** ++ * 2014/06/09 Saar ++ * ++ * Order ColMajor ++ * Trans, conjugate ++ * ++******************************************************/ ++ ++int CNAME(BLASLONG rows, BLASLONG cols, FLOAT alpha_r, FLOAT alpha_i, FLOAT *a, BLASLONG lda, FLOAT *b, BLASLONG ldb) ++{ ++ BLASLONG i,j,ia,ib; ++ FLOAT *aptr,*bptr; ++ ++ if ( rows <= 0 ) return(0); ++ if ( cols <= 0 ) return(0); ++ ++ aptr = a; ++ ++ lda *= 2; ++ ldb *= 2; ++ ib = 0; ++ for ( i=0; i<cols ; i++ ) ++ { ++ bptr = &b[ib]; ++ ia = 0; ++ ++ for(j=0; j<rows; j++) ++ { ++ bptr[0] = alpha_r * aptr[ia] + alpha_i * aptr[ia+1]; ++ bptr[1] = - alpha_r * aptr[ia+1] + alpha_i * aptr[ia]; ++ ia += 2; ++ bptr += ldb; ++ } ++ aptr += lda; ++ ib += 2; ++ } ++ ++ return(0); ++ ++} ++ ++ +diff --git a/kernel/riscv64/zomatcopy_rn.c b/kernel/riscv64/zomatcopy_rn.c +new file mode 100644 +index 00000000..ded381e1 +--- /dev/null ++++ b/kernel/riscv64/zomatcopy_rn.c +@@ -0,0 +1,70 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++#include "common.h" ++ ++/***************************************************** ++ * 2014/06/09 Saar ++ * ++ * Order rowMajor ++ * No Trans ++ * ++******************************************************/ ++ ++int CNAME(BLASLONG rows, BLASLONG cols, FLOAT alpha_r, FLOAT alpha_i, FLOAT *a, BLASLONG lda, FLOAT *b, BLASLONG ldb) ++{ ++ BLASLONG i,j,ia; ++ FLOAT *aptr,*bptr; ++ ++ if ( rows <= 0 ) return(0); ++ if ( cols <= 0 ) return(0); ++ ++ aptr = a; ++ bptr = b; ++ ++ lda *=2; ++ ldb *=2; ++ ++ for ( i=0; i<rows ; i++ ) ++ { ++ ia = 0; ++ ++ for(j=0; j<cols; j++) ++ { ++ bptr[ia] = alpha_r * aptr[ia] - alpha_i * aptr[ia+1]; ++ bptr[ia+1] = alpha_r * aptr[ia+1] + alpha_i * aptr[ia]; ++ ia += 2; ++ } ++ aptr += lda; ++ bptr += ldb; ++ } ++ ++ return(0); ++ ++} ++ ++ +diff --git a/kernel/riscv64/zomatcopy_rnc.c b/kernel/riscv64/zomatcopy_rnc.c +new file mode 100644 +index 00000000..fc27f17e +--- /dev/null ++++ b/kernel/riscv64/zomatcopy_rnc.c +@@ -0,0 +1,69 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++#include "common.h" ++ ++/***************************************************** ++ * 2014/06/09 Saar ++ * ++ * Order rowMajor ++ * No Trans , conjugate ++ * ++******************************************************/ ++ ++int CNAME(BLASLONG rows, BLASLONG cols, FLOAT alpha_r, FLOAT alpha_i, FLOAT *a, BLASLONG lda, FLOAT *b, BLASLONG ldb) ++{ ++ BLASLONG i,j,ia; ++ FLOAT *aptr,*bptr; ++ ++ if ( rows <= 0 ) return(0); ++ if ( cols <= 0 ) return(0); ++ ++ aptr = a; ++ bptr = b; ++ ++ lda *=2; ++ ldb *=2; ++ ++ for ( i=0; i<rows ; i++ ) ++ { ++ ia = 0; ++ for(j=0; j<cols; j++) ++ { ++ bptr[ia] = alpha_r * aptr[ia] + alpha_i * aptr[ia+1]; ++ bptr[ia+1] = - alpha_r * aptr[ia+1] + alpha_i * aptr[ia]; ++ ia += 2; ++ } ++ aptr += lda; ++ bptr += ldb; ++ } ++ ++ return(0); ++ ++} ++ ++ +diff --git a/kernel/riscv64/zomatcopy_rt.c b/kernel/riscv64/zomatcopy_rt.c +new file mode 100644 +index 00000000..d34db24e +--- /dev/null ++++ b/kernel/riscv64/zomatcopy_rt.c +@@ -0,0 +1,72 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++#include "common.h" ++ ++/***************************************************** ++ * 2014/06/09 Saar ++ * ++ * Order rowMajor ++ * Trans ++ * ++******************************************************/ ++ ++int CNAME(BLASLONG rows, BLASLONG cols, FLOAT alpha_r, FLOAT alpha_i, FLOAT *a, BLASLONG lda, FLOAT *b, BLASLONG ldb) ++{ ++ BLASLONG i,j,ia,ib; ++ FLOAT *aptr,*bptr; ++ ++ if ( rows <= 0 ) return(0); ++ if ( cols <= 0 ) return(0); ++ ++ aptr = a; ++ ++ lda *= 2; ++ ldb *= 2; ++ ib = 0; ++ ++ for ( i=0; i<rows ; i++ ) ++ { ++ bptr = &b[ib]; ++ ia = 0; ++ ++ for(j=0; j<cols; j++) ++ { ++ bptr[0] = alpha_r * aptr[ia] - alpha_i * aptr[ia+1]; ++ bptr[1] = alpha_r * aptr[ia+1] + alpha_i * aptr[ia]; ++ ia += 2; ++ bptr += ldb; ++ } ++ aptr += lda; ++ ib += 2; ++ } ++ ++ return(0); ++ ++} ++ ++ +diff --git a/kernel/riscv64/zomatcopy_rtc.c b/kernel/riscv64/zomatcopy_rtc.c +new file mode 100644 +index 00000000..a80ee6df +--- /dev/null ++++ b/kernel/riscv64/zomatcopy_rtc.c +@@ -0,0 +1,72 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++#include "common.h" ++ ++/***************************************************** ++ * 2014/06/09 Saar ++ * ++ * Order rowMajor ++ * Trans, conjugate ++ * ++******************************************************/ ++ ++int CNAME(BLASLONG rows, BLASLONG cols, FLOAT alpha_r, FLOAT alpha_i, FLOAT *a, BLASLONG lda, FLOAT *b, BLASLONG ldb) ++{ ++ BLASLONG i,j,ia,ib; ++ FLOAT *aptr,*bptr; ++ ++ if ( rows <= 0 ) return(0); ++ if ( cols <= 0 ) return(0); ++ ++ aptr = a; ++ ++ lda *= 2; ++ ldb *= 2; ++ ib = 0; ++ ++ for ( i=0; i<rows ; i++ ) ++ { ++ bptr = &b[ib]; ++ ia = 0; ++ ++ for(j=0; j<cols; j++) ++ { ++ bptr[0] = alpha_r * aptr[ia] + alpha_i * aptr[ia+1]; ++ bptr[1] = - alpha_r * aptr[ia+1] + alpha_i * aptr[ia]; ++ ia += 2; ++ bptr += ldb; ++ } ++ aptr += lda; ++ ib += 2; ++ } ++ ++ return(0); ++ ++} ++ ++ +diff --git a/kernel/riscv64/zrot.c b/kernel/riscv64/zrot.c +new file mode 100644 +index 00000000..98be68db +--- /dev/null ++++ b/kernel/riscv64/zrot.c +@@ -0,0 +1,70 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++/************************************************************************************** ++* 2013/09/14 Saar ++* BLASTEST float : OK ++* BLASTEST double : OK ++* CTEST : OK ++* TEST : OK ++* ++**************************************************************************************/ ++ ++#include "common.h" ++ ++int CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y, FLOAT c, FLOAT s) ++{ ++ BLASLONG i=0; ++ BLASLONG ix=0,iy=0; ++ FLOAT temp[2]; ++ BLASLONG inc_x2; ++ BLASLONG inc_y2; ++ ++ if ( n <= 0 ) return(0); ++ ++ inc_x2 = 2 * inc_x ; ++ inc_y2 = 2 * inc_y ; ++ ++ while(i < n) ++ { ++ temp[0] = c*x[ix] + s*y[iy] ; ++ temp[1] = c*x[ix+1] + s*y[iy+1] ; ++ y[iy] = c*y[iy] - s*x[ix] ; ++ y[iy+1] = c*y[iy+1] - s*x[ix+1] ; ++ x[ix] = temp[0] ; ++ x[ix+1] = temp[1] ; ++ ++ ix += inc_x2 ; ++ iy += inc_y2 ; ++ i++ ; ++ ++ } ++ return(0); ++ ++} ++ ++ +diff --git a/kernel/riscv64/zscal.c b/kernel/riscv64/zscal.c +new file mode 100644 +index 00000000..0521aaa0 +--- /dev/null ++++ b/kernel/riscv64/zscal.c +@@ -0,0 +1,88 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++/************************************************************************************** ++* 2013/09/14 Saar ++* BLASTEST float : OK ++* BLASTEST double : OK ++* CTEST : OK ++* TEST : OK ++* ++**************************************************************************************/ ++ ++#include "common.h" ++ ++int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r,FLOAT da_i, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y, FLOAT *dummy, BLASLONG dummy2) ++{ ++ BLASLONG i=0; ++ BLASLONG inc_x2; ++ BLASLONG ip = 0; ++ FLOAT temp; ++ ++ if ( (n <= 0) || (inc_x <= 0)) ++ return(0); ++ ++ ++ inc_x2 = 2 * inc_x; ++ for ( i=0; i<n; i++ ) ++ { ++ if ( da_r == 0.0 ) ++ { ++ if ( da_i == 0.0 ) ++ { ++ temp = 0.0; ++ x[ip+1] = 0.0 ; ++ } ++ else ++ { ++ temp = - da_i * x[ip+1] ; ++ x[ip+1] = da_i * x[ip] ; ++ } ++ } ++ else ++ { ++ if ( da_i == 0.0 ) ++ { ++ temp = da_r * x[ip] ; ++ x[ip+1] = da_r * x[ip+1]; ++ } ++ else ++ { ++ temp = da_r * x[ip] - da_i * x[ip+1] ; ++ x[ip+1] = da_r * x[ip+1] + da_i * x[ip] ; ++ } ++ } ++ x[ip] = temp; ++ ++ ip += inc_x2; ++ } ++ ++ return(0); ++ ++} ++ ++ +diff --git a/kernel/riscv64/zswap.c b/kernel/riscv64/zswap.c +new file mode 100644 +index 00000000..ae4760ae +--- /dev/null ++++ b/kernel/riscv64/zswap.c +@@ -0,0 +1,72 @@ ++/*************************************************************************** ++Copyright (c) 2013, The OpenBLAS Project ++All rights reserved. ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the above copyright ++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 OpenBLAS project 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 OPENBLAS PROJECT 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. ++*****************************************************************************/ ++ ++/************************************************************************************** ++* 2013/09/14 Saar ++* BLASTEST float : OK ++* BLASTEST double : OK ++* CTEST : OK ++* TEST : OK ++* ++**************************************************************************************/ ++ ++#include "common.h" ++#include <stdio.h> ++ ++int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT dummy3, FLOAT dummy4, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y, FLOAT *dummy, BLASLONG dummy2) ++{ ++ BLASLONG i=0; ++ BLASLONG ix=0,iy=0; ++ FLOAT temp[2]; ++ BLASLONG inc_x2; ++ BLASLONG inc_y2; ++ ++ if ( n < 0 ) return(0); ++ ++ inc_x2 = 2 * inc_x; ++ inc_y2 = 2 * inc_y; ++ ++ while(i < n) ++ { ++ ++ temp[0] = x[ix] ; ++ temp[1] = x[ix+1] ; ++ x[ix] = y[iy] ; ++ x[ix+1] = y[iy+1] ; ++ y[iy] = temp[0] ; ++ y[iy+1] = temp[1] ; ++ ++ ix += inc_x2 ; ++ iy += inc_y2 ; ++ i++ ; ++ ++ } ++ return(0); ++ ++} ++ ++ +diff --git a/lapack/laswp/riscv64/Makefile b/lapack/laswp/riscv64/Makefile +new file mode 100644 +index 00000000..75411deb +--- /dev/null ++++ b/lapack/laswp/riscv64/Makefile +@@ -0,0 +1,13 @@ ++TOPDIR = ../../.. ++include ../../../Makefile.system ++ ++ifndef LASWP ++LASWP = ../generic/laswp_k.c ++endif ++ ++ifndef ZLASWP ++ZLASWP = ../generic/zlaswp_k.c ++endif ++ ++include ../generic/Makefile ++ +diff --git a/param.h b/param.h +index 055749dc..4a776501 100644 +--- a/param.h ++++ b/param.h +@@ -2509,6 +2509,45 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + #define SYMV_P 16 + #endif + ++#ifdef RISCV64_GENERIC ++#define GEMM_DEFAULT_OFFSET_A 0 ++#define GEMM_DEFAULT_OFFSET_B 0 ++#define GEMM_DEFAULT_ALIGN 0x03fffUL ++ ++#define SGEMM_DEFAULT_UNROLL_M 2 ++#define SGEMM_DEFAULT_UNROLL_N 2 ++ ++#define DGEMM_DEFAULT_UNROLL_M 2 ++#define DGEMM_DEFAULT_UNROLL_N 2 ++ ++#define CGEMM_DEFAULT_UNROLL_M 2 ++#define CGEMM_DEFAULT_UNROLL_N 2 ++ ++#define ZGEMM_DEFAULT_UNROLL_M 2 ++#define ZGEMM_DEFAULT_UNROLL_N 2 ++ ++#define SGEMM_DEFAULT_P 128 ++#define DGEMM_DEFAULT_P 128 ++#define CGEMM_DEFAULT_P 96 ++#define ZGEMM_DEFAULT_P 64 ++ ++#define SGEMM_DEFAULT_Q 240 ++#define DGEMM_DEFAULT_Q 120 ++#define CGEMM_DEFAULT_Q 120 ++#define ZGEMM_DEFAULT_Q 120 ++ ++#define SGEMM_DEFAULT_R 12288 ++#define DGEMM_DEFAULT_R 8192 ++#define CGEMM_DEFAULT_R 4096 ++#define ZGEMM_DEFAULT_R 4096 ++ ++#define SYMV_P 16 ++ ++#define GEMM_DEFAULT_OFFSET_A 0 ++#define GEMM_DEFAULT_OFFSET_B 0 ++ ++#endif ++ + #ifdef ARMV7 + #define SNUMOPT 2 + #define DNUMOPT 2